排序算法.希尔排序&快速排序
来源:互联网 发布:复古美颜相机软件 编辑:程序博客网 时间:2024/05/22 03:19
一个很好的书.<Java数据结构和问题求解>Mark Allen Weiss著.折腾了两个月.终于还了.学校不让解了.
最后看了排序的东西
平方性能是任何通过相邻交换算的所固有的.
希尔排序:
希尔排序的增量是插入排序的改进. //类似高数的差分
N个不同数组的平均逆序数是N*(N-1)/4
希尔排序最坏情况是奇数位都是较小数.偶数位都是较大数.最后一次的复杂度平方
如果连续增量是互质的复杂度为O N^(5/4)
如果是除以2.2 复杂度是 O N^(7/6) 没有人知道为什么.这个是模拟的结果
希尔排序的希尔增量类似数学归纳法里面的
1,2,3,4,...n成立
假设n+1,n+2,n+3,n+4,...2n-1成立如果
2n+1,2n+2,2n+3,2n+4,...3n-1成立
则所有都成立.
希尔排序的代码
- public static <AnyTypeentends Comparable<? super AnyType>>
- void shellsort(AnyType [ ]a )
- {
- int j=0;
- for(int gap=a.length/2;gap>0;)
- {gap=gap==2?1:(int)(gap/2.2);} //选取希尔增量.保证增量到1.为什么是2.2 作者也不知道
- for(int i=gap;i<a.length;i++)
- {
- AnyType tmp=a[i];
- j=i;
- for(;j>=gap&&tmp.compareTo(a[j-gap]<0);j-=gap )
- a[j]=a[j-gap]; //交换
- a[j]=tmp;
- }
- }
快速排序: //jdk里面系统排序就是这个排序.
快速排序最好情况利用了中间数是调和数的事实
挑选中心点是快速排序性能中至关重要的部分.千万不能以第一个为中心.选取中点为中心点是个合理但是消极的策略
选取策略:第一个元素.最后个元素.中点元素不大不小的那个放到为中心点.
快速排序推荐策略:
step1:交换中心点到最后的位置.
step2:从左到右运行i.从右到左运行j.遇到一个之前的大元素时i停.遇到一个小元素的时候j停.交换i j的值.值到i j相等停止
step3:位置i和最后的那个数交换(中心点)
书还了.还有个作业.如果排序的数各个都相等怎么办?好的算法必然这个也要考虑.通常做法是继续排序.或者改进优化.继续排序可能上面的i和j停不了.到了中点终止.呵呵.正好
- 排序算法.希尔排序&快速排序
- c++ 算法(希尔排序/快速排序算法)
- 希尔排序算法和快速排序算法
- 排序算法:希尔、归并、快速、堆排序
- 排序算法:希尔、归并、快速、堆排序
- 排序算法二(归并排序、快速排序、希尔排序)
- 排序算法,快速排序,希尔排序,冒泡排序
- java排序算法二分法 希尔排序 快速排序 归并排序
- JavaScript排序算法(希尔排序、快速排序、归并排序)
- 排序算法--希尔排序
- 排序算法-希尔排序
- 排序算法--希尔排序
- 排序算法--希尔排序
- 排序算法---希尔排序
- 排序算法---希尔排序
- 排序算法--希尔排序
- 排序算法--希尔排序
- 排序算法:希尔排序
- 最近无法总是来啊!
- photoshop超级技巧—工具面板技巧
- photoshop超级技巧—复制技巧
- photoshop超级技巧—选择技巧
- 看完我所有的文章你没有受触动就是一傻瓜!没前途!
- 排序算法.希尔排序&快速排序
- 学习web的总结
- JFreeChart教程
- 这多东西啥时候能学完?
- linux学习方向和方法浅谈
- 哈哈……
- 分享ASP实现的汇率转换,给的是一种思想而已
- 数据库连接代码
- JSP内置对象与Servlet子类映射表