希尔排序

冒泡排序、简单插入排序、选择排序是最简单的三种排序算法,时间复杂度都是O(n2),下面介绍一种低于O(n2)的排序算法-希尔排序

插入排序算法的原理就是取用依次递减的增量序列进行多次插入排序,最终使其基本有序,然后再通过增量为1的插入排序使其最终有序。

设计技巧就是使其在前几轮的排序中基本有序,从而可以减少最后一次增量为1的插入排序的交换次数。

这种排序算法关键在于增量序列的选择,本人使用的是increment=increment/3+1,更多的增量序列如下:

 

代码:

package Sort;

import java.util.Scanner;

public class ShellSort {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scan=new Scanner(System.in);
        int n=scan.nextInt();
        int[] arr=new int[n];
        for(int i=0;i<n;i++) {
            arr[i]=scan.nextInt();
        }
        int[] result=shell(arr);
        for(int i=0;i<result.length;i++) {
            System.out.print(result[i]+" ");
        }
    }
    public static int[] shell(int[] arr) {
        int increment=arr.length;//设置增量
        while(increment>1) {
            increment=increment/3+1;
            for(int i=increment;i<arr.length;i++) {
                while(arr[i]<arr[i-increment]) {
                    int temp=arr[i];
                    arr[i]=arr[i-increment];
                    arr[i-increment]=temp;
                }
            }
        }
        return arr;
    }

}

 

posted @ 2018-02-01 17:33  henu小白  阅读(133)  评论(0)    收藏  举报