一、题目
题目:手写一个快速排序
例子:
输入:[1, 34, 5, 76, 8, 6, 9, 7, 6, 3]
输出:[1, 3, 5, 6, 6, 7, 8, 9, 34, 76]
二、代码实现
var sortArray = function (nums) {
quickSort(nums, 0, nums.length - 1)
return nums
}
var quickSort = function (nums, i, j) {
let start = i // 左指针
let end = j //右指针
let pivot = nums[start] //基准数,这里取数组第一个数
//递归出口 左指针和右指针相等时候,说明只有一个值
if (start >= end) {
return
}
//左右指针相遇的时候退出扫描循环
while (start < end) {
//右指针从右向左扫描,碰到第一个小于基准数的时候停住
while (start < end && nums[end] >= pivot) {
end = end - 1
}
//否则交换位置
swap(nums, end, start)
//左指针从左向右扫描,碰到第一个大于基准数的时候停住
while (start < end && nums[start] <= pivot) {
start = start + 1
}
//否则交换位置
swap(nums, start, end)
}
//递归处理左右数组
quickSort(nums, i, start)
quickSort(nums, start + 1, j)
}
var swap = function (nums, i, j) {
let temp = nums[i]
nums[i] = nums[j]
nums[j] = temp
}