实习之路--点滴积累五_希尔

接下来说说希尔排序。

原理:

(1)将数组分为多个组,每个组的组内的元素位置相隔一个“增量”

(2)对每个组进行插入排序

(3)将“增量”值减少,然后循环

需要说明的是:

(1)“增量”值的选择问题,最后一个一定是1,比如,可以为,5、3、1或者5、2、1

 

代码如下:

 

 1 void Shell_Sort(long *p, long n)
 2 {
 3     long gap = n / 2;
 4     while (gap)
 5     {
 6         for (long i = 0; i < gap; i++)
 7         {
 8             for (long j = i + gap; j < n; j += gap)
 9             {
10                 if (p[j] < p[j - gap])
11                 {
12                     int k = j - gap;
13                     int temp = p[j];
14                     while ( k >= 0 && temp < p[k])
15                     {
16                         p[k + gap] = p[k];
17                         k -= gap;
18                     }
19                     p[k + gap] = temp;
20                 }
21             }
22         }
23         gap /= 2;
24     }
25 }

测试用例:

1 int main()
2 {
3     long s[] = { 3, 8, 1, 9, 10, 4, 2, 7, 5, 6 };
4     Shell_Sort(s, 10);
5     for (long i = 0; i < 10; i++) cout << s[i] << ends << ends;
6     return 0;
7 }

实验截图:

posted @ 2015-03-28 16:21  CasparJ  阅读(120)  评论(0编辑  收藏  举报