排序4——希尔排序

来源:互联网 发布:网络直播英语怎么说 编辑:程序博客网 时间:2024/05/22 15:43

三、希尔排序

在要排序的一组数中,根据某一增量分为若干子序列,并对子序列分别进行插入排序。

然后逐渐将增量减小,并重复上述过程。直至增量为1,此时数据序列基本有序,最后进行插入排序。

希尔排序增量的选取非常关键,增量每次除以3递减可以达到O(n^(3/2))的时间复杂度

import java.util.Scanner;public class Test{//定义数组的最大长度static final int num=100;//希尔排序(升序)public static void XiErSort(int[] arr,int length){int increment=length;do{//增量序列increment=increment/3+1;for(int i=increment+1;i<=length;i++){if(arr[i]<arr[i-increment]){//将arr[i]插入到有序增量子表arr[0]=arr[i];int j=0;for(j=i-increment;j>0&&arr[0]<arr[j];j-=increment){arr[j+increment]=arr[j];}arr[j+increment]=arr[0];}}}while(increment>1);}public static void main(String[] args) {int[] arr=new int[num];Scanner in=new Scanner(System.in);System.out.println("请输入数组中的元素个数(<=100):");int length=in.nextInt();System.out.println("输入数组中的元素:");for(int i=1;i<=length;i++){arr[i]=in.nextInt();}//调用排序方法对数组进行排序XiErSort(arr, length);System.out.println("排序后的数组:");for(int i=1;i<=length;i++){System.out.print(arr[i]+" ");}}}

运行结果:

请输入数组中的元素个数(<=100):
10
输入数组中的元素:
23 34 56 76 33 11 22 33 55 77
排序后的数组:
11 22 23 33 33 34 55 56 76 77 


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

稳定性:不稳定

原创粉丝点击