几种常见的排序算法(插入排序,希尔排序,归并排序和快速排序)——希尔排序

来源:互联网 发布:格兰杰詹姆斯数据 编辑:程序博客网 时间:2024/05/01 17:01

希尔排序是对插入排序的改进版本,在对于大型的数组来说,插入排序的速度很慢,因为每次只能交换两个相邻的元素,因此元素只能一点一点地从数组的一端移动到另一端,如果最小的元素刚好在数组的最后一位,就需要进行n-1次移动,在最坏的情况下时间复杂度为O(n²),希尔排序为了加快插入排序简单的改进了一下插入排序,交换不相邻的元素而对数组的局部进行排序,最终用插入排序将局部有序的数组排序。

static void exchange(int[] a,int i,int j) {int temp;temp=a[i];a[i]=a[j];a[j]=temp;}public static void main(String []args){int[] a= {1,-1,0,5,4,3};int N=a.length;int h=1;while(h<N/3) h=3*h+1;while(h>=1) {for(int i=h;i<a.length-1;i++)for(int j=i;j>0&&a[j]<a[j-h];j-=h)exchange(a,j,j-h);h/=3;}for(int i=0;i<a.length-1;i++)System.out.println(a[i]+" ");}

前面一篇文章已经说到,插入排序对于倒置数量较少的数组或者说是部分有序的数组来说,效率很高,希尔排序减少了倒置,为插入排序的实现提供了便利。与插入排序相比,希尔排序的效率要高了很多,并且数组越大,优势越大。


阅读全文
0 0
原创粉丝点击