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

本文深入探讨了希尔排序算法的工作原理、实现细节及优化策略,通过具体实例展示如何使用希尔插入进行排序操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

	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;
			}
		}
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值