美文网首页
插入排序

插入排序

作者: 炒河粉儿 | 来源:发表于2021-09-13 09:31 被阅读0次

插入排序的核心思路

  • 首先我们将数组中的数据分为两个分区:已排序区间和未排序区间。初始已排序区间只有一个元素。就是数组中的第一个元素。插入排序的核心思想是取未排序区间中的元素,在已排序区间中找到合适的插入位置将其插入,并保证已排序区间数据一直有序,重复这个过程,知道未排序区间中的元素为空,则排序结束

插入排序的操作流程

  • 假设要对一个数组a[6]进行排序。首先确定数组的第一个元素属于已排序区间。剩下的元素为未排序区间。在未排序区间中取第一个元素,即a[1],与已排序区间中的元素从后向前依次比较。假如a[1]<a[0],则将a[0]向后移动一位。如果a[1]>a[0],则a[1]插入在a[0]后面。
  • 上一步操作已经将数组中a[0]和a[1]排好序了。此时取到a[2],用a[2]和a[1]进行比较,如果a[1]>a[2],则a[1]向后移动一位,继续比较a[2]和a[0],如果a[0]<a[2],则将a[2]插入到a[1]的位置。这样就排好了数组的前三个元素。
  • 重复以上操作,直到未排序区间的元素为空则排序结束。

插入排序的相关

  • 插入排序是原地排序算法,是稳定排序算法。
  • 插入排序的平均时间复杂度为O(n²)。

简单的代码实现

- (void)insertionSort
{
    NSMutableArray *numberArray = [NSMutableArray arrayWithArray:@[@5,@1,@6,@2,@4,@3]];
    
    NSLog(@"排序之前的结果:%@",numberArray);
    
    for (int i = 1; i < numberArray.count; i++) {
        
        NSNumber *value = numberArray[i];
        
        int j = i-1;
        
        for (; j>= 0; j--) {
            
            if ([numberArray[j] intValue] > [value intValue]) {
                
                numberArray[j+1] = numberArray[j];
            }else {
                
                break;
            }
            
        }
        
        numberArray[j+1] = value;
        
    }
    
    NSLog(@"排序之后的结果:%@",numberArray);
}

相关文章

网友评论

      本文标题:插入排序

      本文链接:https://www.haomeiwen.com/subject/kectgltx.html