(算法)初级排序算法
来源:互联网 发布:客户端软件开发 编辑:程序博客网 时间:2024/05/28 14:57
这篇文章想整理对一下选择排序、插入排序以及希尔排序的理解
注:先说一下几个常用到方法:
exch(Comparable[] a,int i,int j ):调换数组a中a[i]及a[j]的位置;
show(Comparable[] a):打印数组a中的每一个元素;
less(Comparable v,Comparable w) :返回boolean类型,v是否小于w
boolean isSorted( Comparable[] a):返回boolean类型,数组a是否有序
排序算法的主要核心在于sort()即排序部分,篇幅缘故以上方法的具体实现请参考另一篇文章:排序算法类的模板 http://blog.csdn.net/weixin_37892687/article/details/7834606
选择排序
遍历整个数组,将第一个元素与整个数组的元素比较,并与最小的元素调换位置;同理,将第二个元素与数组中a[2]…a[a.length]的元素相比较,取最小元素进行调换位置。以此类推,直至所有元素都排列完毕。
具体实现代码如下:
public class Selection { public static void sort(Comparable[] a) { int N =a.length; for(int i=0;i<N;i++) { int min =i; for(int j=i+1;j<N;j++) { if(less(a[j],a[min])) { min=j; } exch(a,i,min); } } }}
插入排序
假设你手上有一副扑克牌,从第二张牌开始,将第二张牌与第一张比较,如果小于,就将两者调换位置,大于或等于则不变。,然后再将第三张牌与第二张比较,若小于,则调换位置;再与第一张牌比较,若小于,则再次调换位置,同理,但大于或等于不再变动。此时,前三张牌已呈有序状态。
同理,将第N张牌与前面的N-1张牌逐个比较,或者调换,或者不再变动,则换第N+1张牌开始比较。
以此类推,直至所有元素都排列完毕。
具体实现代码如下
package algorithm;public class Insertion{ /* * 整理所有元素,使其有序排列 */ public static void sort(Comparable[] a){ for(int i = 1;i<a.length;i++) { /* * 比较a[i]及a[i-1],当条件为true时(a[i]<a[i-1]),不断交换位置,实现调整. */ for(int j = i;j>0&&less(a[j],a[j-1]);j--) { exch(a,j,j-1); } } }}
希尔排序
希尔排序是对插入排序的改进:对于大规模乱序数组,使用插入算法将会很慢,因为他只会交换相邻的元素,假设a[0]为最大的值,那么他就需要不断与相邻的元素交换,直到最后一位。
希尔排序的思想是使数组中任意间隔为h的元素都是有序的,交换不相邻的元素以对数组的局部进行排序。
并在最终使用插入排序为 局部有序的数组 排序。
具体代码如下
public static void sort(Comparable[] a){ int h=1; int N =a.length; while(h<N/3) { h = 3*h+1; //1,4,13,40,121,364... } while(h>=1) { for(int i =h;i<N;i++) { /* * 将a[i]插入到a[i-h],a[i-2*h],a[i-3*h]...之中 */ for(int j = i;j>=h&&less(a[j],a[j-h]);j-=h) { exch(a,j,j-h); } } h=h/3; } }
- (算法)初级排序算法
- 初级算法排序(一)
- 算法(2.1 初级排序)
- 初级排序算法(algs4)
- 初级排序算法(二)
- 算法手记(5)初级排序算法
- 初级排序算法实现
- 初级排序算法总结
- 初级排序算法
- 排序算法之初级排序
- 排序算法之初级排序
- 初级排序算法(选择排序、插入排序、希尔排序)
- 冒泡排序算法(初级版)
- 初级排序算法(选择、插入、Shell)
- 算法学习(1)——初级排序算法
- java算法(一)——初级排序算法
- 几个初级排序算法总结
- 《算法》阅读笔记-2.1初级排序算法
- 很好用的下拉刷新上拉加载的框架smartrefreshlayout属性
- 牛客网错题集锦3
- springcloud(暂时结束)
- 12种不宜使用的Javascript语法---《Javascript语言精粹》
- 自动轮播加Scrollview加tablyout加多条目
- (算法)初级排序算法
- 购物车
- CS 300 Tree Antichain 构造,树,二分染色
- gomicro微服务系列之一
- How to Construct Basic Logic Gates from Nand Gate Using Bool Algebra
- hadoop streaming 遇到的问题小结
- 本地购物车实现
- 《利用栈实现含浮点数的算术表达式的计算》
- 自定义view,实现圆环进度