希尔排序之C++实现(初级版)

希尔排序之C++实现(初级版)

一、源代码:希尔排序之C++实现(初级版)

 1 /*希尔排序基本思想:
 2 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。
 3 所有距离为d1的倍数的记录放在同一个组中。
 4 先在各组内进行直接插入排序;
 5 然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量  =1(<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。*/
 6 #include<iostream>
 7 using namespace std;
 8 /*定义输出一维数组的函数*/
 9 void print(int array[], int n)
10 {
11     for (int i = 0; i < n; i++)
12     {
13         cout << array[i] << " ";
14     }
15     cout << endl;
16 }
17 
18 int shellSort(int array[], int n)
19 {
20     //定义变量,记录交换次数
21     int count = 0;
22     //定义中间变量,做为临时交换变量
23     int temp;
24     int j;
25     //遍历数组(进行排序)
26     cout << "开始对数组进行排序了..." << endl;
27     //定义初始增量值
28     int gap = n;
29     do{
30         //初始增量变化规律
31         gap = gap / 3 + 1;
32         for (int i = gap; i < n; i++)
33         {
34             //当左边元素大于右边元素时
35             if (array[gap] < array[i - gap])
36             {
37                 //将当前的数组元素存储到临时变量中
38                 temp = array[i];
39                 //将从i位置(比temp大的元素)开始的数组元素整体后移
40                 for (j = i - gap; j >= 0 && array[j]>temp; j -= gap)
41                 {
42                     cout << array[j] << "" << array[j + gap] << "互换了" << endl;
43                     //将数组中的元素整体后移一个单位
44                     array[j + gap] = array[j];
45                     //输出此时数组的顺序
46                     cout << "数组此时的顺序是:";
47                     print(array, 10);
48                     //每交换一次,记录数加1
49                     count++;
50                 }
51                 array[j + gap] = temp;
52             }
53         }
54     } while (gap > 1);
55     cout << "数组排序结束了..." << endl;
56     return count;
57 }
58 
59 int main()
60 {
61     //定义待排序的一维数组
62     int array[] = { 1, 3, 4, 5, 2, 6, 10, 9, 8, 7 };
63     //输出原始数组
64     cout << "原始数组是:" << endl;
65     print(array, 10);
66     //对数组进行排序
67     int count = shellSort(array, 10);
68     //输出排序后的数组
69     cout << "排序后的数组是:" << endl;
70     print(array, 10);
71     cout << "共交换" << count << "" << endl;
72     return 0;
73 }

二、运行效果

 

posted @ 2017-08-19 13:59  勇闯天涯zfc  阅读(1583)  评论(0编辑  收藏  举报