下面是详细的讲解JavaScript实现快速排序的完整攻略。
1. 什么是快速排序?
快速排序是一种常用的排序算法,通过分割(partition)和递归分治的思想来快速排序一个数组,在平均情况下它的时间复杂度为 $O(n\log n)$,也是一种不稳定的排序方法。
2. 快速排序的实现过程
2.1 分割
对一个数组进行快速排序的过程就是先将其从中间分割成两部分,比中间值小的放在左边,比中间值大的放在右边。实现过程如下:
function partition(arr, left, right) {
let pivot = arr[Math.floor((left + right) / 2)]
while (left <= right) {
while (arr[left] < pivot) {
left++
}
while (arr[right] > pivot) {
right--
}
if (left <= right) {
[arr[left], arr[right]] = [arr[right], arr[left]]
left++
right--
}
}
return left
}
上述代码中,我们选取了数组的中间值作为基准值(pivot),然后从左右两边开始比较,将比基准值小的放在左边,比基准值大的放在右边,最后返回用于下一次递归的分割位置。
2.2 递归排序
我们可以使用递归算法来对分好的数组两部分进行排序:
function quickSort(arr, left = 0, right = arr.length - 1) {
if (arr.length > 1) {
let index = partition(arr, left, right)
if (left < index - 1) {
quickSort(arr, left, index - 1)
}
if (index < right) {
quickSort(arr, index, right)
}
}
return arr
}
其中,如果一个数组的长度大于1,则进行分割排序,并对左右两边递归调用快速排序。直到所有分割的子数组长度小于等于1为止,返回排好序的结果数组。
3. 快速排序实现示例
3.1 数组排序
let arr = [6, 2, 7, 1, 5, 8, 4, 3]
console.log(quickSort(arr)) // [1, 2, 3, 4, 5, 6, 7, 8]
3.2 对象数组排序
let arrObj = [
{ name: 'Alice', age: 20 },
{ name: 'Bob', age: 15 },
{ name: 'Chris', age: 25 }
]
arrObj.sort((a, b) => a.age - b.age)
console.log(arrObj) // [{ name: 'Bob', age: 15 }, { name: 'Alice', age: 20 }, { name: 'Chris', age: 25 }]
在对象数组中使用快速排序,只需要在排序时自定义比较函数,按照对象的某个属性进行比较。在上面的示例中,我们按照age属性进行排序。
以上就是JavaScript实现快速排序的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript实现快速排序(自已编写) - Python技术站