iOS算法總結-插入排序

插入排序(Straight Insertion Sort): 基本操作是將一個記錄插入到已經排好的有序表中,從而得到一個新的,記錄數增1的有序表。

代碼如下:

- (void)logInsertionSortingArray {
    NSMutableArray * arr = @[@(16),@(1),@(2),@(9),@(7),@(12),@(5),@(3),@(8),@(13),@(10)].mutableCopy;
    for (int i = 1; i < arr.count; i++) {
        int j = i;  /* j是一個坑, 確定坑的位置,再把數從坑里取出來,注意順序*/
        id temp = arr[i]; /* temp 是從坑里取數*/
        if ([arr[i] intValue]< [arr[i-1] intValue]) {  /* j > 0 防止越界。寫&&前面效率更高*/
            while (j > 0 && [temp intValue] < [arr[j-1] intValue]) {
                arr[j] = arr[j-1];
                j--;
            }
            arr[j] = temp;
        }
    }
}

效果圖如下:


對上圖解釋如下:

從第二個開始,取出該位置的值為臨時值temp,位置為j,此時j的位置為空,叫做坑,然后temp依次往前比較,直到找到比temp小,把temp插入該的位置,完成一次循環。

插入排序復雜度分析:

從空間上來看,它只需要一個記錄的輔助空間,因此關鍵是看它的時間復雜度。當最好的情況,時間復雜度為O(n)。當最壞的情況,即待排序表示逆序的情況,如{6,5,4,3,2},此時需要比較(n+2)(n-1)/2次,記錄的移動次數也達到(n+4)(n-1)/2次。如果排序記錄是隨機的,那么根據概率相同的原則,平均比較和移動次數約為n2/4次,因此插入排序法的時間復雜度為O(n2),該排序比冒泡和選擇排序的性能要好一些。

上一篇:iOS算法總結-選擇排序
下一篇:iOS算法總結-希爾排序

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 概述 排序有內部排序和外部排序,內部排序是數據記錄在內存中進行排序,而外部排序是因排序的數據很大,一次不能容納全部...
    蟻前閱讀 5,215評論 0 52
  • 概述:排序有內部排序和外部排序,內部排序是數據記錄在內存中進行排序,而外部排序是因排序的數據很大,一次不能容納全部...
    每天刷兩次牙閱讀 3,742評論 0 15
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 將一個記錄插入到已排序好...
    依依玖玥閱讀 1,271評論 0 2
  • 今天是2017年元月一日,是新紀元的第一天。 從昨晚開始,到今天一天,朋友圈充斥著濃濃的總結與展望的昂揚氛圍;早上...
    李星凝閱讀 461評論 2 2
  • ? 5萬買SUV能買到什么樣的2017新款SUV,現在這車價是確實便宜了很多,以前拿5萬塊錢想買車,以前基本就有兩...
    道一cy閱讀 146評論 0 0