数据结构:直接插入排序

拟墨画扇 提交于 2020-01-01 20:36:31

一、直接插入排序

直接插入排序(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 }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!