算法 & 理解快速排序

1. 什么快速排序

快速排序是冒泡排序的升级版,排序本质是循环,快速循环,指的就是循环很快,那这个快速排序自然就是减少循环次数来提升更快的循环了。

2. 快速排序思想

快速排序主要的核心思想就是:选基点、后排序、再分治 最后递归重复

2.1 选基点

arr = [10, 2, 9, 12, 8, 20, 30, 4]
在 arr 数组中选择任意一个数字作为左右两边比较的基点,比如我们选择 10

2.2 后排序

将小于10的放左边、大于10的放右边
arr = [2, 9, 8, 4, 10, 20, 30, 12]

2.3 再分治

分割 [2, 9, 8, 4] 和 [20, 30, 12] 出来,然后重复 2.1 和 2.2 步骤

3. 代码案例分析

function swap(arr, i, j) {
	let temp = arr[i]
    arr[i] = arr[j]
    arr[j] = temp
}
function QuickSort(arr, low, high) {
	if (low >= high) return
	// 1. 选基点 
	let i = low, j = high, pivot = arr[low]
	while(i < j) {
		// 2. 排序
		while (arr[j] >= pivot && i < j ) { // 右边大于基点的忽略掉,向前走
			j --
		}
		while (arr[i] <= pivot && i < j ) { // 左边小于基点的忽略掉,向前走
			i ++
		}
		swap(arr, i, j) // 最后肯定发生右边小于基点,左边大于基点,此时进行交换位置即可
	}
	swap(arr, low, j) // 排序后别完了还要把基准点的值放到左右两边中间,这里的 j 也可以换成 i
	// 3. 分割左右两边,然后重复以上步骤
	QuickSort(arr, low, j - 1)
	QuickSort(arr, j + 1, high)
	return arr
}
let arr = [10, 2, 9, 12, 8, 20, 30, 4]
QuickSort(arr, 0, arr.length - 1)
// 排序后
// arr: [2, 4, 8, 9, 10, 12, 20, 30]

完!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cookcyq

请作者喝杯暖暖的奶茶

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值