排序问题-希尔排序
来源:互联网 发布:minecraft 源码 unity 编辑:程序博客网 时间:2024/06/06 08:55
希尔排序通过比较一定间隔的元素来工作,各趟比较所用的距离随着排序算法的进行而减小,直到间隔为1-也就是直到比较完相邻的两个元素时算法结束。
希尔排序使用的序列叫做增量序列,希尔排序的性能主要取决于增量序列的选取。一般避免选取各增量有公因子的增量序列,这样会有子序列重复排序。shell本人建议选取An=N/2的增量序列,此时最坏情况下运行时间为O(N2);Hibbard提出了一个An=2的k次幂-1的增量序列,其最坏的运行时间为O(N3/2)。
排序过程如下序列所示:
初始序列:9 4 7 8 10 3 1 12 2
增量为4: 2 3 1 8 9 4 7 12 10
增量为2:1 3 2 4 7 8 9 12 10
增量为1:1 2 3 4 7 8 9 10 12
源码如下:
void shell_sort(int arr[], int count){int i, j, increment;int tmp;for(increment = count / 2; increment > 0; increment /= 2 ){/*使用插入排序的方式实现希尔排序*/for(i = increment; i < count; i++){tmp = arr[i];for(j = i; j >= increment; j -=increment){if(tmp < arr[j - increment]){arr[j] = arr[j - increment];}else{break;}}arr[j] = tmp;}}}上边源码中子序列使用的是插入排序,相比于插入排序和冒泡排序,希尔排序运行的时间大大减少,使用十万的随机数字排序时间如下(微秒):
使用90w的随机数字排序时间如下:
0 0
- 排序问题-希尔排序
- 希尔排序问题
- 希尔排序问题
- 排序算法-希尔排序
- 希尔排序-ShellSort
- shell sort 希尔排序问题
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- interleaving string
- 编写新闻客户端&网络编程day1(66期第四天)
- Vulkan Render Pass
- stash的hooks和api
- ios拨打电话
- 排序问题-希尔排序
- 第6周项目1-分数类的雏形(1)
- LeetCode 13 -Roman to Integer ( JAVA )
- curl模拟浏览器请求
- 湖南省多校对抗赛 Morse
- LeetCode(java)6. ZigZag Conversion
- Mysql外键约束
- V-Play 使用粗体验
- HTML/CSS基本知识