【希尔】排序------ 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;
			}
		}
	}


如何实现在O(n)时间内排序,并且空间复杂度为O(1)

如何实现在O(n)时间内排序,并且空间复杂度为O(1)
  • guozhenqiang19921021
  • guozhenqiang19921021
  • 2016年04月23日 11:14
  • 326

N o v e m b e r 1 6 t h F r i d a y

 T o d a y   I   l o o k e d   t h r o u g h   t h e   e m u l e   p r o t o c o l   a g a i n .    ...
  • Lu_ming
  • Lu_ming
  • 2007年11月30日 21:33
  • 3090

o(1), o(n), o(logn), o(nlogn)

在描述算法复杂度时,经常用到o(1), o(n), o(logn), o(nlogn)来表示对应算法的时间复杂度, 这里进行归纳一下它们代表的含义: 这是算法的时空复杂度的表示。不仅仅...
  • Mars93
  • Mars93
  • 2017年07月15日 21:32
  • 441

N o v e m b e r 6 t h T u e s d a y

T h e r e   i s   a   j a v a   s o u r c e   a b o u t   e n c o d i n g   c h a r a c t e r s   s ...
  • Lu_ming
  • Lu_ming
  • 2007年11月30日 21:19
  • 3673

N o v e m b e r 1 9 t h M o n d a y

T h e   k a n g   p r o j e c t   I   h a v e   t o   p u t   a s i d e   d u e   t o   w o r k   a ...
  • Lu_ming
  • Lu_ming
  • 2007年11月30日 21:34
  • 2767

如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)

题目描述: 如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1) 解析: 利用计数排序法,设置一大小为65536的int数组,范围a[0]~a[65535],并初始为0,...
  • rj042
  • rj042
  • 2014年03月13日 00:18
  • 2348

一个时间复杂度为O(n),空间复杂度为O(1)的排序算法

 一个时间复杂度为O(n),空间复杂度为O(1)的排序算法来源:http://blog.csdn.net/rerli/archive/2003/12/18/19041.aspx#508832     ...
  • l_r_h
  • l_r_h
  • 2007年05月18日 00:19
  • 2663

如何对n个大小都小于100的整数进行排序,要求时间复杂度O(n),空间复杂度O(1)。

提示:hash表 #include using namespace std; #define N 100 #define RANGE 100 int* getRandomArray() { i...
  • Edwards_June
  • Edwards_June
  • 2017年01月14日 12:09
  • 358

三种线性时间O(n)排序算法 - 计数-基数-桶 - C++实现

引言 注:由于没有启用任何公式编辑器,为表示方便:以下涉及时间复杂度表示时,其渐近符号用以下符号代替: 先来看一个定理:任意一个比较排序算法在最坏情况下,都需要做 $(nlgn)次的比较。其可...
  • heyabo
  • heyabo
  • 2013年05月13日 03:38
  • 2809

N o v e m b e r 2 8 t h W e d n e s d a y

I f   y o u   d e v e l o p   a n   a p p l i c a i o n   f o r   A p a c h e   p l a t f o r m ,   ...
  • Lu_ming
  • Lu_ming
  • 2007年11月30日 21:43
  • 47278
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【希尔】排序------ T(n) = O(n^1.5),S(n) = O(1) ---- 不稳定
举报原因:
原因补充:

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