希尔排序

来源:互联网 发布:淘宝网聚划算天天特价 编辑:程序博客网 时间:2024/05/28 20:20
先看一下希尔排序的来历:首先说一下直接插入排序,在元素较少、元素基本有序的情况下排序的效率非常高,但是这两个条件都过于苛刻,首先说排序的元素的数量不可能太小否则排序也失去了意义,元素基本有序的情况也几乎不可能。这就使得直接插入排序无用武之地了,于是就发痒没条件制造条件的精神发明了希尔排序。首先解决元素数量要少的问题:分组。这样每组的元素数就降低了好几倍。第二基本有序,只有最后一次排序满足了这个特点。子序列的排序还是使用的直接插入排序。希尔排序的排序思路:从上面的描述中不难看出,希尔排序在于划分待排序咧。设增量为d这k k+d k+2d ...为第一趟排序,经过一趟排序后相隔增量为d的元素相对有序。然后缩小增量直到增量变为1,然后进行一次插入排序,排序结束。希尔排序的时间复杂度目前据书上说比较难断定,这里就不做讨论了。*/public class ShellSort{public static void main(String[]args) {int a[] = {0,13,12,5,32,4,14,56,8};int i,j;int increment = a.length;do{increment = increment/3 +1 ;for(i=increment+1;i<=a.length-1;i++){if(a[increment]<a[i-increment]){a[0] = a[i];for(j=i-increment;j>0&&a[0]<a[j];j-=increment){a[j+increment] = a[j];}a[j+increment] = a[0];}}}while(increment > 1);for(int k=1;k<a.length;k++){System.out.println(a[k]);}}}

0 0
原创粉丝点击