码迷,mamicode.com
首页 > 编程语言 > 详细

希尔排序

时间:2018-05-14 21:34:13      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:java   ring   http   插入排序   gap   shell   分享   rate   else   

回顾插入排序:越有序越快  好的时间复杂度为O(n)坏的为O(n^2)

假如有10000个数进行排序那么直接插入排序的时间复杂度为10000*10000

如果采用分组思想,让组内进行直接插入排序那么时间复杂度就为100*100*100

我们希尔排序就是利用分组思想进行排序的   让每组数据变得有序  越有序越快

希尔排序的时间复杂度为O(n^1.3~n^1.5)  不稳定

 

写程序时要件进行分组,产生组的概念(记得产生的组必须互为素数,且最后一个增量必须是1),然后再进行每一组的直接插入排序 .

技术分享图片

package sort;
import java.util.Arrays;
public class TestShellSortDemo {
    public static void shellSort(int [] array){
        //产生组的概念
        int [] d={5};
        for(int i=0;i<d.length;i++){
            shell(array,d[i]);
        }
    }
    //每一组进行直接插入排序
    public static void shell(int[]array,int gap){
        int tmp = 0;
        int i = 0;
        int j = 0;
        for( i = gap;i < array.length;i++){//这里一定注意是i++,如果是i+=gap就会让剩下的几组没有排
            tmp=array[i];
            for( j = i-gap;j>=0;j-=gap){
                if(array[j]>tmp){
                    array[j+gap]=array[j];
                }else{
                    break;
                }
            }
            array[j+gap]=tmp;
        }
        
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[]array={22,77,99,11,55,33,66,88,44,55,23,12,54,16,87};
        shellSort(array);
        System.out.println(Arrays.toString(array));
    }

}

 

希尔排序

标签:java   ring   http   插入排序   gap   shell   分享   rate   else   

原文地址:https://www.cnblogs.com/ioio2/p/9038024.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!