美文网首页
插入排序

插入排序

作者: 炒河粉儿 | 来源:发表于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