排序算法(五):希尔排序

来源:互联网 发布:pageoffice for java 编辑:程序博客网 时间:2024/05/23 23:30

定义:

将一个序列按照一定的“间距”分成几个子序列,把每个子序列进行插入排序,得到一个小数基本在前,大数基本在后的基本有序的序列,然后将“间距”逐渐缩小直到间距为1,最终得到一个有序的序列。

时间复杂度:O(n^3/2)


实现:

public class Shell {    public void sort(int[] arr){        int increment=arr.length;        do{            increment=increment /3+1;            for(int i=increment;i<arr.length;i++){                if(arr[i] < arr[i-increment]){                    int tmp=arr[i];                    int j;                    for(j=i-increment;j>=0 && arr[j]>tmp;j=j-increment){                        arr[j+increment]=arr[j];                    }                    arr[j+increment]=tmp;                }                SortUtils.print(arr);            }            //SortUtils.print(arr);        }while(increment >1);    }    public static void main(String[] args){        int[] arr=SortUtils.getArray();        Shell shell=new Shell();        shell.sort(arr);    }}


0 0
原创粉丝点击