一、直接插入排序
直接插入排序(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 }