帮我写一个快速排序,js
时间: 2023-08-25 09:11:31 浏览: 48
### 回答1:
function quickSort(arr) {
if (arr.length <= 1) {
return arr;
} else {
let pivot = arr[0];
let less = [];
let greater = [];
for (let i = 1; i < arr.length; i++) {
if (arr[i] < pivot) {
less.push(arr[i]);
} else {
greater.push(arr[i]);
}
}
return [...quickSort(less), pivot, ...quickSort(greater)];
}
}
// 例子
let arr = [6, 2, 8, 3, 9, 1];
let sortedArr = quickSort(arr);
console.log(sortedArr) // [1, 2, 3, 6, 8, 9]
### 回答2:
快速排序(Quick Sort)是一种高效的排序算法,它通过选择一个基准元素将数组分为两部分,一部分小于基准元素,另一部分大于基准元素。然后对这两部分分别进行递归排序,最后将排序后的两部分合并即可。
以下是一个使用JavaScript语言实现的快速排序算法:
```javascript
function quickSort(arr) {
// 如果数组长度小于等于1,则直接返回
if (arr.length <= 1) {
return arr;
}
var pivotIndex = Math.floor(arr.length / 2);
var pivot = arr.splice(pivotIndex, 1)[0]; // 选择基准元素并从数组中删除
var left = [];
var right = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i] < pivot) {
left.push(arr[i]); // 小于基准元素的放在左边
} else {
right.push(arr[i]); // 大于等于基准元素的放在右边
}
}
// 递归对左右子数组进行快速排序并合并结果
return quickSort(left).concat([pivot], quickSort(right));
}
var arr = [5, 3, 8, 4, 2, 9, 1, 6, 7];
console.log(quickSort(arr)); // 输出 [1, 2, 3, 4, 5, 6, 7, 8, 9]
```
上述代码首先判断数组长度是否小于等于1,若是,则直接返回数组。选择基准元素后,遍历数组,将小于基准元素的放在左边,大于等于基准元素的放在右边。然后对左右两部分分别进行递归排序,并将排序后的结果与基准元素合并返回。
使用上述代码可以快速对一个数组进行排序,时间复杂度为O(nlogn)。
### 回答3:
快速排序是一种常用的排序算法,它的基本思想是通过递归将待排序数组划分为两个子数组,然后对这两个子数组进行排序,最终得到有序数组。
下面是一个使用JavaScript实现的快速排序算法:
```javascript
function quickSort(arr) {
if (arr.length <= 1) {
return arr; // 如果数组长度小于等于1,直接返回
}
const pivotIndex = Math.floor(arr.length / 2); // 取中间元素索引作为基准
const pivot = arr.splice(pivotIndex, 1)[0]; // 取出基准元素并从原数组中删除
const left = [];
const right = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] < pivot) {
left.push(arr[i]); // 小于基准的元素放入左侧数组
} else {
right.push(arr[i]); // 大于等于基准的元素放入右侧数组
}
}
// 递归对左右两侧数组进行快速排序
return quickSort(left).concat([pivot], quickSort(right));
}
const arr = [5, 3, 8, 4, 2, 9, 1, 6, 7];
console.log(quickSort(arr)); // 输出 [1, 2, 3, 4, 5, 6, 7, 8, 9]
```
以上代码通过选择数组中间元素作为基准,将数组划分为左右两个子数组,并递归对两个子数组进行快速排序,最终合并得到有序数组。该算法的时间复杂度为O(nlogn)。