快速排序算法史上最经典实现
Posted 我想月薪过万
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序算法史上最经典实现相关的知识,希望对你有一定的参考价值。
快速排序算法经典介绍
快速排序算法实现原理图解
第一步:
第二步: 取出基准值
第三步: 先右指针往左遍历,遇到比基准值44小的就填补到左指针指向的位置
第四步:左指针向右遍历,遇到比基准值大的就放到右指针指向的位置
第五步:重复第三步和第四步,直到左右指针指向同一个位置,然后将基准值放入该位置
第六步:第五步之后很明显得到了左右序列,下面只需要对左右序列递归即可。
快速排序代码实现
var arry = [44, 3, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48]
function quickSort(arr, left, right)
//递归结束的条件
if ((right - left + 1) < 2) return
// 实现快速排序算法核心步骤
// 选取基准值,在这里我选择数组最左边的值为
var middleVal = arr[left]
// 初始化左右指针
var l = left
var r = right
//循环移动左右指针,并切换至
while (l < r)
//从右边开始寻找比基准值小的数
while ((arr[r] > middleVal) && (l < r))
r--
//如果在右边找到了比中间值小的数,便填入左边的坑,这个是有条件的,你不能越过左指针
if (l < r)
arr[l++] = arr[r]
//从左边开始寻找比基准值大的数
while ((arr[l] > middleVal) && (l < r))
l++
//如果在左边找到了比中间值大的数,便填入右边的坑,这个是有条件的,你不能越过右指针
if (l < r)
arr[r--] = arr[l]
//左右指针移动到一起之后插入中间值
arr[l] = middleVal
//递归左右序列
quickSort(arr, left, l - 1)
quickSort(arr, l + 1, right)
//调用自己实现的快速排序算法
quickSort(arry, 0, arry.length - 1)
console.log(arry)
运行结果
以上是关于快速排序算法史上最经典实现的主要内容,如果未能解决你的问题,请参考以下文章