【快速】排序, T(n) = O(nlgn),O(n^2) S(n) = O(lgn) --- 不稳定

本文深入解析了快速排序算法的工作原理,包括如何选择分割点、如何分割数组以及递归调用的过程。通过实例演示,帮助读者理解快速排序算法的实现细节。

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

public static void quickSort(RS[] arrRS,int low,int high){
		
		// 保存【分割点】
		int partition;
		
		// 【段长】大于1
		if(low < high){
			
			// 一次分割,获得【分割点】 和  两个【子段】
			partition = quickPartition(arrRS,low,high);    
			
			//【递归】两个子段
			quickSort(arrRS, low, 		  partition-1);
			quickSort(arrRS, partition+1, high);
		}
	}

	//分割
	private static int quickPartition(RS[] arrRS, int left, int right) {
		
		// 拿起左边第一个,作【标尺】
		RS tempRS = arrRS[left];
		
		// 【段长】大于1,未结束
		while (left < right) {
			
			/*################  左     <<===   右  ##################*/
			while (left < right && arrRS[right].val>=tempRS.val) {
				right--;
			}
			if (left < right) {  // 若未结束,右边大的,放到左边 left 索引处,left 右移
				arrRS[left] = arrRS[right];
				left ++;
			}
			
			/*################  左      ===>>   右  ##################*/
			while (left < right && arrRS[left].val<tempRS.val) {
				left++;
			}
			if (left < right) {  // 若未结束,左边小的,放到右边 right 索引处,right 左移
				arrRS[right] = arrRS[left];
				right --;
			}
			
		}
		
		// 【标尺】归【分割点】
		arrRS[left] = tempRS;
		
		// 返回分割点
		return left;
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值