數據結構:直接插入排序


一、直接插入排序

直接插入排序(Straight Insertion Sort)的基本思想是:把n個待排序的元素看成為一個有序表和一個無序表。開始時有序表中只包含1個元素,無序表中包含有n-1個元素,排序過程中每次從無序表中取出第一個元素,將它插入到有序表中的適當位置,使之成為新的有序表,重復n-1次可完成排序過程。

 1 void insert_sort(int a[], int n)
 2 {
 3     int i, j, k;
 4 
 5     for (i = 1; i < n; i++)
 6     {
 7         //為a[i]在前面的a[0...i-1]有序區間中找一個合適的位置
 8         for (j = i - 1; j >= 0; j--)
 9             if (a[j] < a[i])
10                 break;
11         //如找到了一個合適的位置
12         if (j != i - 1)
13         {
14             //將比a[i]大的數據向后移
15             int temp = a[i];
16             for (k = i - 1; k > j; k--)
17                 a[k + 1] = a[k];
18             //將a[i]放到正確位置上
19             a[k + 1] = temp;
20         }
21     }
22 }

 

 c++實現代碼:

 1 #include <iostream>
 2 using namespace std;
 3 void insertSort(int* a, int n)
 4 {
 5     int i, j, k;
 6 
 7     for (i = 1; i < n; i++)
 8     {
 9         //為a[i]在前面的a[0...i-1]有序區間中找一個合適的位置
10         for (j = i - 1; j >= 0; j--)
11             if (a[j] < a[i])
12                 break;
13 
14         //如找到了一個合適的位置
15         if (j != i - 1)
16         {
17             //將比a[i]大的數據向后移
18             int temp = a[i];
19             for (k = i - 1; k > j; k--)
20                 a[k + 1] = a[k];
21             //將a[i]放到正確位置上
22             a[k + 1] = temp;
23         }
24     }
25 }
27 int main()
28 {
29     int i;
30     int a[] = {20,40,30,10,60,50};
31     int ilen = (sizeof(a)) / (sizeof(a[0]));
32 
33     cout << "before sort:";
34     for (i=0; i<ilen; i++)
35         cout << a[i] << " ";
36     cout << endl;
37 
38     insertSort(a, ilen);
39 
40     cout << "after  sort:";
41     for (i=0; i<ilen; i++)
42         cout << a[i] << " ";
43     cout << endl;
44 
45     return 0;
46 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM