Java数据结构——快速排序

基本思想:

取待排序数组的第一个元素作为基准

每一轮排序将比基准数小的元素移动到基准数左边,比基准数大的元素移动到基准数右边

具体步骤为:

(1)分别使用左右指针指向待排序数组左右的元素

(2)首先让右指针开始向左移动,直到找到一个小于基准数的元素

(3)左指针向右移动,直到找到一个大于基准数的元素

(4)两两交换

(5)重复此步骤,直到两指针相等,将此时指针指向元素与数组第一个元素进行交换

再对基准数左右的子数组进行相同的快速排序,以此递归下去,得到有序数组


代码实现:

//快速排序
public void quickSort() {
	int left = 0;
	int right = array.length - 1;
	quickSort(left, right);
}

public void quickSort(int left, int right) {
	if (left < right) {
		int l = left;
		int r = right;
		int midVal = array[l];
		int temp;
		while (l < r) {
			while (midVal <= array[r] && l < r) {
				r--;
			}
			while (midVal >= array[l] && l < r) {
				l++;
			}
			if (l < r) {
				temp = array[l];
				array[l] = array[r];
				array[r] = temp;
			}
		}
		array[left] = array[l];
		array[l] = midVal;
		quickSort(left, l - 1);
		quickSort(l + 1, right);
	}
}

时间复杂度:O(nlogn)

稳定性:

由于在左右指针指向的数于基准数比较并进行两两交换的过程中,可能会导致相同元素的相对位置改变,故快速排序是不稳定的。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值