一、直接插入排序
直接插入排序(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 }
来源:https://www.cnblogs.com/jianqiao123/p/12129784.html