写一个JavaScript快速排序
时间: 2023-09-09 12:05:15 浏览: 84
javascript快速排序算法详解
### 回答1:
以下是一个基于递归的 JavaScript 快速排序实现:
```javascript
function quickSort(arr) {
if (arr.length <= 1) {
return arr;
}
const pivotIndex = Math.floor(arr.length / 2);
const pivot = arr[pivotIndex];
const left = [];
const right = [];
for (let i = 0; i < arr.length; i++) {
if (i === pivotIndex) {
continue;
}
if (arr[i] < pivot) {
left.push(arr[i]);
} else {
right.push(arr[i]);
}
}
return [...quickSort(left), pivot, ...quickSort(right)];
}
```
该函数接受一个数组参数,使用递归的方式对数组进行排序。首先,我们检查数组的长度是否小于等于 1,如果是,则直接返回该数组。
接下来,我们选择一个枢轴元素(pivot)作为比较基准,通常是数组中间的元素。然后,我们创建两个新数组 left 和 right,分别用于存储比枢轴元素小和大的元素。
接着,我们遍历数组中的每个元素,将比枢轴元素小的元素添加到 left 数组中,将比枢轴元素大的元素添加到 right 数组中。
最后,我们使用展开运算符将递归地排序 left 和 right 数组后得到的结果与枢轴元素合并成一个新的数组,并返回它。
这个实现在大多数情况下是有效的,但在最坏情况下(例如数组已经按相同的顺序排序),它的时间复杂度为 O(n²)。
### 回答2:
JavaScript中的快速排序算法实现如下:
```javascript
function quickSort(arr) {
// 如果数组的长度小于等于1,则已经是有序的,直接返回
if (arr.length <= 1) {
return arr;
}
// 选取基准值,可以选择数组中的任意一个元素
const pivotIndex = Math.floor(arr.length / 2);
const pivot = arr.splice(pivotIndex, 1)[0];
const left = [];
const right = [];
// 将小于基准值的元素放入left数组,大于等于基准值的元素放入right数组
for (let i = 0; i < arr.length; i++) {
if (arr[i] < pivot) {
left.push(arr[i]);
} else {
right.push(arr[i]);
}
}
// 递归地对left和right数组进行快速排序,然后将两个有序数组和基准值合并
return quickSort(left).concat([pivot], quickSort(right));
}
// 测试排序
const arr = [5, 9, 1, 3, 7, 2, 8, 4, 6];
const sortedArr = quickSort(arr);
console.log(sortedArr);
```
以上是使用递归实现的快速排序算法,基于选择一个基准值,然后将数组中小于基准值的元素放入左边的数组,大于等于基准值的元素放入右边的数组,递归地对左右两边的数组进行排序,最后将排序好的左数组、基准值和排序好的右数组合并起来。该算法的平均时间复杂度为O(nlogn),是一种高效的排序算法。
### 回答3:
JavaScript中的快速排序算法是一种常见的排序算法,它采用了分治的策略。下面是一个用JavaScript实现的快速排序算法:
```javascript
function quickSort(arr) {
if (arr.length <= 1) {
return arr;
}
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, 1, 6, 7];
const sortedArr = quickSort(arr);
console.log(sortedArr);
```
代码解析:
1. `quickSort`函数接受一个数组作为参数。
2. 首先判断数组的长度是否小于等于1,如果是,则直接返回该数组。
3. 在数组中选择一个基准元素,这里选择数组中间的元素作为基准。
4. 使用`splice`方法将基准元素从原数组中移除,并将其存储在`pivot`变量中。
5. 创建两个空数组,`left`用来存放比基准元素小的元素,`right`用来存放比基准元素大的元素。
6. 遍历原数组,将比基准元素小的元素放入`left`数组,将比基准元素大的元素放入`right`数组。
7. 通过递归调用`quickSort`函数对`left`和`right`数组进行排序,并使用数组的`concat`方法将排序后的数组与基准元素拼接起来。
8. 最后,返回拼接后的数组,即得到了排序后的数组。
在上述示例中,输入的原始数组为`[5, 3, 8, 4, 2, 1, 6, 7]`,经过快速排序算法处理后,输出的排序后的数组为`[1, 2, 3, 4, 5, 6, 7, 8]`。
阅读全文