java快速排序实现

最近读《java常用算法》,对书中快排实现的逻辑解释如下

public static void quickSort(int[] arr, int left, int right) {

		int f, t;
		int rtemp, ltemp;
		f = arr[(left + right) / 2];// 分界值
		ltemp = left;
		rtemp = right;

		while (ltemp < rtemp) {

			while (arr[ltemp] < f) { // 找到左边不小于分界值的数值位置 a
				++ltemp; // 移动
			}

			while (arr[rtemp] > f) { // 找到右边不大于分界值的数值位置 b
				--rtemp; // 移动
			}
			if (ltemp <= rtemp) { // 如果此时 a的位置在b位置左边 交换
				t = arr[ltemp];
				arr[ltemp] = arr[rtemp];
				arr[rtemp] = t;
				++ltemp; //继续移动左边
				--rtemp; //继续移动右边
			}
		}
		if (ltemp == rtemp) { //此处注释的话会少循环一次,但是书里有这个逻辑,暂时不明白为什么
			ltemp++;
		}
		System.out.print("f:"+f+"  ");
		for (int i : arr) {
			System.out.print(i + ",");
		}
		System.out.println();
		if (left < rtemp) { //如果右边的指针没有移动到最左边 继续递归左边部分
			quickSort(arr, left, ltemp - 1);
		}
		if (right > ltemp) {//如果左边的指针没有移动到最右边 继续递归右边部分
			quickSort(arr, rtemp + 1, right);
		}

	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值