本关任务:编写快速排序算法,能够对数组进行快速排序。
时间: 2024-05-03 07:21:17 浏览: 131
快速排序是一种基于分治思想的排序算法。它的基本思想是选取一个基准元素,将数组划分为两个子数组,使得左子数组中所有元素小于等于基准元素,右子数组中所有元素大于等于基准元素,然后递归地对左右子数组进行排序,最终将整个数组排序。
以下是快速排序的实现代码:
```python
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[0]
left = []
right = []
for i in range(1, len(arr)):
if arr[i] < pivot:
left.append(arr[i])
else:
right.append(arr[i])
return quick_sort(left) + [pivot] + quick_sort(right)
```
在这个实现中,我们首先判断数组长度是否小于等于1,如果是,则直接返回原数组。否则,我们选取数组的第一个元素作为基准元素(也可以随机选取),然后将数组划分为两个子数组,左子数组中所有元素小于等于基准元素,右子数组中所有元素大于等于基准元素。接下来,我们递归地对左右子数组进行排序,并将它们和基准元素拼接起来,形成排好序的数组。
这个实现中,我们使用了额外的空间来存储左右子数组,空间复杂度为O(n),其中n是数组长度。如果想要原地排序,可以使用双指针的方式进行划分。
相关问题
本关任务:编写快速排序算法,能够对数组进行快速排序c++
快速排序是一种高效的排序算法,其基本思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,然后分别对这两部分记录继续进行排序,直到整个序列有序。以下是C++实现快速排序的一个简单版本:
```cpp
#include <iostream>
using namespace std;
// 分区函数,返回基准元素的新位置
int partition(int arr[], int low, int high) {
int pivot = arr[high]; // 选择最右边的元素作为基准
int i = (low - 1); // 小于基准的元素索引
for (int j = low; j <= high - 1; j++) {
if (arr[j] < pivot) {
i++; // 将当前元素移到基准左边
swap(arr[i], arr[j]);
}
}
swap(arr[i + 1], arr[high]); // 将基准放到正确的位置
return (i + 1);
}
// 快速排序函数
void quickSort(int arr[], int low, int high) {
if (low < high) {
// 找到分区点并进行划分
int pi = partition(arr, low, high);
// 对左右两个子数组递归地进行快速排序
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}
// 主函数演示
int main() {
int arr[] = {9, 7, 5, 11, 12, 2, 14, 3, 10};
int n = sizeof(arr) / sizeof(arr[0]);
cout << "Original array: ";
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
quickSort(arr, 0, n - 1);
cout << "\nSorted array: ";
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
return 0;
}
```
本关任务:编写快速排序算法,能够对数组进行快速排序。3
快速排序是一种常用的排序算法,其核心思想是分治和递归。算法的基本步骤如下:
1. 选取一个基准元素,将数组分成两个子数组:小于基准元素的子数组和大于基准元素的子数组。
2. 对两个子数组分别递归进行快速排序。
3. 将两个子数组合并成一个有序数组。
下面是快速排序的代码实现(使用 C++ 语言):
void quickSort(int* arr, int left, int right) {
if (left >= right) {
return;
}
int i = left, j = right, pivot = arr[left];
while (i < j) {
while (i < j && arr[j] >= pivot) {
j--;
}
arr[i] = arr[j];
while (i < j && arr[i] <= pivot) {
i++;
}
arr[j] = arr[i];
}
arr[i] = pivot;
quickSort(arr, left, i - 1);
quickSort(arr, i + 1, right);
}
调用快速排序算法可以这样做:
int arr[10] = {5, 1, 9, 3, 7, 4, 8, 6, 2, 0};
quickSort(arr, 0, 9);
排序后数组的元素为:0, 1, 2, 3, 4, 5, 6, 7, 8, 9。
希望我的回答对你有帮助。
阅读全文