排序-希尔

原理:不停拆分,对各个小子序列进行直接插入排序再更换步长继续排序,等基本有序后再进行一次直接插入排序。

public static int[] ShellSort(int[]a){
		int k;
		for(int i=a.length/2;i>0;i/=2){
			//i为步长
			for(int j=i;j<a.length;j++){
				//j为后半段
				int tmp = a[j];
				for( k=j-i;k>=0;k-=i){
					//k为前半段
					if(tmp<a[k]){
						a[k+i] = a[k];
					}
					else{
						break;
					}
				}
			a[k+i] = tmp;	
			}
			
		}
		return a;
	}

看着是三重循环,第一重用来设置步长进行每次排序,j为后半段每次进1与前面的每段进行比较,也就是一个跨度为i的直接插入排序

不稳定,最好、平均时间复杂度为这里写图片描述最坏为这里写图片描述

猜你喜欢

转载自blog.csdn.net/runahazuki/article/details/77839878
今日推荐