码迷,mamicode.com
首页 > 其他好文 > 详细

实习之路--点滴积累五

时间:2015-03-28 17:00:40      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:

接下来说说希尔排序。

原理:

(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 }

实验截图:

技术分享

实习之路--点滴积累五

标签:

原文地址:http://www.cnblogs.com/casparzheng/p/4374150.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!