写一段 快速排序代码
时间: 2023-09-03 10:26:56 浏览: 100
快速排序代码
### 回答1:
以下是一个基于递归实现的快速排序算法的 Python 代码实现:
```python
def quick_sort(arr):
if len(arr) <= 1:
return arr
else:
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)
```
其中,我们首先定义了一个 `quick_sort` 函数来实现快速排序。如果待排序数组长度小于等于 1,则直接返回该数组即可。否则,我们以数组的第一个元素为基准点(`pivot`),将数组分为左右两个部分,其中左边的部分都小于基准点,右边的部分都大于等于基准点。然后,我们对左右两个部分进行递归排序,并将结果拼接在一起返回。
### 回答2:
快速排序是一种常用的排序算法,通过分治的思想实现。其基本思路是选取一个基准元素,将待排序数组分成两部分,小于基准的元素放在基准元素的左边,大于基准的元素放在基准元素的右边,然后对两部分递归地进行快速排序。
下面是一个使用递归实现的快速排序的代码示例:
```python
def quicksort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr)//2] # 选择基准元素
left = [x for x in arr if x < pivot] # 小于基准的元素
middle = [x for x in arr if x == pivot] # 等于基准的元素
right = [x for x in arr if x > pivot] # 大于基准的元素
return quicksort(left) + middle + quicksort(right) # 递归地对两部分进行快速排序
# 示例使用
arr = [8, 4, 2, 9, 3, 1, 5, 6, 7]
sorted_arr = quicksort(arr)
print(sorted_arr)
```
以上代码先选择一个基准元素,然后通过列表推导式将待排序的元素分成三部分:小于基准、等于基准、大于基准。然后递归地对这三部分分别进行快速排序,最后将排序好的三部分合并起来。
使用该代码对示例数组 `[8, 4, 2, 9, 3, 1, 5, 6, 7]` 进行排序,输出结果是 `[1, 2, 3, 4, 5, 6, 7, 8, 9]`。
### 回答3:
快速排序是一种常用的排序算法,基于分治思想。它的基本思想是通过一趟排序将待排序序列分割成独立的两部分,其中一部分的所有元素小于另一部分的所有元素,然后再对这两部分分别进行快速排序,最终达到整个序列有序的目的。
下面是一段C++实现的快速排序代码:
```cpp
#include<iostream>
using namespace std;
// 交换两个元素的值
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
// 将序列分为两个子序列,返回分割点的索引
int partition(int arr[], int low, int high) {
int pivot = arr[low]; // 以第一个元素作为分割点
while (low < high) {
while (low < high && arr[high] >= pivot) {
high--;
}
swap(&arr[low], &arr[high]);
while (low < high && arr[low] <= pivot) {
low++;
}
swap(&arr[low], &arr[high]);
}
return low;
}
// 快速排序递归函数
void quickSort(int arr[], int low, int high) {
if (low < high) {
int pivotIndex = partition(arr, low, high); // 分割点索引
quickSort(arr, low, pivotIndex - 1);
quickSort(arr, pivotIndex + 1, high);
}
}
int main() {
int arr[] = {5, 9, 3, 6, 2, 8, 1, 7, 4};
int n = sizeof(arr) / sizeof(arr[0]);
quickSort(arr, 0, n - 1);
cout << "排序后的序列为:";
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
return 0;
}
```
以上代码展示了快速排序的实现,其中`swap`函数用于交换两个元素的值,`partition`函数用于将序列分割为两部分并返回分割点的索引,`quickSort`函数为快速排序的递归实现。在`main`函数中,我们定义了一个待排序的数组`arr`,然后调用`quickSort`函数对其进行排序。最后输出排序后的序列。
快速排序的时间复杂度为O(nlogn),是一种高效的排序算法。
阅读全文