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