希尔排序

希尔排序

基本思想:分组的直接插入排序,是不稳定排序算法
描述:

  1. 将一个数据序列分成若干组,每组由若干相隔一段距离的元素组成,这段距离称为增量,在一个组内采用直接插入排序算法进行排序;
  2. 增量的初值一般为数据序列长度的一半,以后每趟增量逐渐减小,最后为1,当增量为1时,只有一组,元素是整个序列,在进行一趟直接插入排序即可。

代码

	public static void shellSort(int[] table) {
		for(int delta=table.length/2;delta>0;delta/=2){//控制增量减半
			for(int i =delta;i<table.length;i++){//
				int temp = table[i],j;
				for(j =i- delta;j>=0&&temp<table[j];j-=delta){
					table[j+delta] = table[j];
				}
				table[j+delta] = temp;
			}
			for(int k=0;k<table.length;k++){
				System.out.print(table[k]+ " ");
			}
			System.out.println("");
		}
	}

三层循环

  1. 最外层:以增量delta变化来控制进行若干趟扫描,delta的初值为序列长度的一半,以后逐渐减半,直至为1
  2. 中间循环:进行一趟扫描,序列分为delta组,每组元素进行直接插入排序
  3. 最内层循环:每组元素相距delta远,寻找插入位置

时间复杂度:平均:o(nlogn)~o(n^2)
最好:o(n1.3),最坏:o(n2)
空间复杂度:o(1)

posted @ 2017-02-21 15:57  starryfei  阅读(163)  评论(0编辑  收藏  举报