排序之插入排序

來源:互聯網
上載者:User

標籤:--   記錄   直接插入   code   子列   簡單的   依次   記錄組   類的方法   

1、直接插入排序是一種最簡單的排序方法,它的基本操作是將一個記錄插入到已排好序的有序表中,從而得到一個新的、記錄增1的有序表。一般情況下,第i趟直接插入排序的操作為:在含有i-1個記錄的有序

子列中插入一個記錄r[i],變成含有i個記錄的有序子序列。從已經排好序的部分的尾部向前找合適的位置插入。每次從無序表中取出第一個元素,把它插入到有序表的合適位置,使有序表仍然有序。

第一趟比較前兩個數,然後把第二個數按大小插入到有序表中; 第二趟把第三個資料與前兩個數從後向前掃描,把第三個數按大小插入到有序表中;依次進行下去,進行了(n-1)趟掃描以後就完成了整個排序過程。

  直接插入排序是由兩層嵌套迴圈組成的。外層迴圈標識並決定待比較的數值。內層迴圈為待比較數值確定其最終位置。直接插入排序是將待比較的數值與它的前一個數值進行比較,所以外層迴圈是從第二個數值開始的。當前一數值比待比較數值大的情況下繼續迴圈比較,直到找到比待比較數值小的並將待比較數值置入其後一位置,結束該次迴圈。

  直接插入排序是穩定的,演算法複雜度為O(n^2).

 1 void InsertSort(int a[],int len) 2 { 3     int i, j; 4     for ( i = 1; i < len; i++) 5     { 6         if (a[i] < a[i - 1]) 7         { 8             int temp = a[i]; 9             for ( j = i - 1; j >= 0 && a[j] > temp; j--)10                 a[j+1] = a[j];//後移11             a[j + 1] = temp;12         }13     }14 }

2、折半插入排序:由於插入排序是在一個有序表中進行尋找和插入,這個尋找操作可以利用折半尋找來實現,由此進行的插入排序稱之為折半插入排序。

 1 void BInsertSort(Record *arr, int length) // length是要排序的元素的個數,0號單元除外 2 { 3 for (int i = 2; i <= length; ++i) { 4 arr[0] = arr[i]; // 將arr[i]暫存到arr[0] 5 int low = 1; 6 int high = i - 1; 7 while (low <= high) { // 在arr[low..high]中折半尋找有序插入的位置 8 int m = (low + high) / 2; // 折半 9 if (arr[0].key < arr[m].key) // 關鍵字相同時,使low = m + 1,到高半區,保證穩定性10 high = m - 1; // 插入點在低半區11 else12 low = m + 1; // 插入點在高半區13 }14 for (int j = i - 1; j >= high + 1; --j)15 arr[j + 1] = arr[j]; // 記錄後移16 arr[high + 1] = arr[0]; // 插入17 }18 }

3、希爾排序又稱“縮小增量排序”,它也屬於一種插入排序類的方法。希爾排序是非穩定排序演算法。基本思想:先將整個記錄序列分割成若干個子序列分別插入排序,待整個序列中的記錄“基本有序”時,再對

全體記錄進行一次直接插入排序。子序列的構成不是簡單的“逐段分割”,而是將相隔某個“增量”的記錄組成一個子序列。因此關鍵字記錄不是一步一步地往前挪動,而是跳躍式的往前移,從而使得在進行最後一趟增量為1的插入排序時,序列已經基本有序。

排序之插入排序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.