关闭

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

459人阅读 评论(0) 收藏 举报
分类:
	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;
			}
		}
	}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    文章分类
    最新评论