【希尔】排序------ T(n) = O(n^1.5),S(n) = O(1) ---- 不稳定

原创 2013年12月05日 10:37:47
	public static void doSort(RS[] arrRS,int n_arrRS,int[] arrDelta,int n_arrDelta) {
		//每个delta增量,都进行一次【希尔插入】
		//当delta增量为【1】时,【希尔插入】即等同【直接插入排序】
		for(int i=0; i<n_arrDelta; ++i){
			shellInsert(arrRS, n_arrRS, arrDelta[i]);
		}
	}
	
	private static void shellInsert(RS[] arrRS, int n_arrRS,int delta){
		
		// 存放,【待插入的RS】
		RS holding_RS = null;
		// 【移动指示索引】
		int moving_Index = 0;
		
		//从全列【第二个】开始(0 为 第一个索引),【逐个处理】-----【向前插入】
		for(int i = delta; i< n_arrRS; i++){
			
			// 与【前部有序子列---最后一个】比较
			// ▇▇▇▇▇  ○  ◇◇◇◇◇◇◇◇◇
			if(arrRS[i-delta].val > arrRS[i].val){  // 小了,就要插到前面去
				
				// 存放,【待插入的RS】
				holding_RS = arrRS[i];
				
				//从【有序子列---最后一个】开始后移
				moving_Index = i-delta;
				//移到【适当的位置】为止
				while (0 <= moving_Index && arrRS[moving_Index].val > holding_RS.val) {
					//后移一个位置
					arrRS[moving_Index + delta] = arrRS[moving_Index];
					//下一次,将处理【前一个】
					moving_Index -= delta;
				}
				
				// holding_RS 插入【最终位置】
				arrRS[moving_Index+delta] = holding_RS;
			}
		}
	}


相关文章推荐

C​e​n​t​O​S​+​6​.​4​上​安​装​o​r​a​c​l​e​+​1​1​g​+​R​2​图​文​安​装​教​程

1、用unzip解压 Oracle 11g文件 unzip linux_x86_11gR1_database.zip (这个您也可以在Windows下面解压,不过您要加载过来,如果你的分区...

如果令 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 分别等于

如果令 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 分别等于 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15...

高级排序:希尔排序 O(N*(logN)^2)

希尔排序因计算机科学家Donald L.Shell而得名,他在1959年发现了希尔排序算法。希尔排序基于插入排序,但是增加了一个新的特性,大大地提高了插入排序的执行效率。 在此就不多YY了...

Read the b.o.t.N.A.T's sourcecode---1---b.o.t.s.e.r.v.c

下文将记录本文阅读此代码中遇到的名词解释和问题总结,其中会有对多篇他们文章的引用,致谢先。=======================================================...
  • jo_say
  • jo_say
  • 2011年05月30日 17:24
  • 836

详解使用w​s​g​e​n​和​w​s​i​m​p​o​r​t​开​发​W​e​b​S​e​r​v​i​c​e

本文旨在描述如何使用jdk自带的wsgen.exe 和wsimport.exe开发WebService。 本文旨在描述如何使用jdk自带的wsgen.exe 和wsimport.exe开发WebSer...
  • canlets
  • canlets
  • 2014年06月14日 17:53
  • 1739

一个数组中只有0,1,2三个元素,进行排序,要求时间复杂度为O(n)

思路: 设置三个标记指针,pos0,pos2,cur 令pos0从前往后遍历,指向第一个非0的位置,pos2从后往前遍历,指向第一个非2的位置 然后cur从pos0开始往后遍历: 遇到0就和p...
  • fjqcyq2
  • fjqcyq2
  • 2015年10月06日 10:03
  • 902

复杂度为O(n2)的选择排序(1)

问题描述: /* * Copyright (c) 2015, 烟台大学计算机与控制工程学院 * 作者:张志康 * 完成日期:2015年9月12日 * 版本号:vc6.0 * ...

对n个数进行排序(空间复杂度O(1))

题目:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1) ? 思路分析: (1)关键:哈希表,空间复杂度O(1)中1的含义(只要是常量就可以) (2)在数字范围有限制的情况下...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【希尔】排序------ T(n) = O(n^1.5),S(n) = O(1) ---- 不稳定
举报原因:
原因补充:

(最多只允许输入30个字)