c++写一个快速排序
时间: 2023-09-23 20:06:39 浏览: 117
c++快速排序
### 回答1:
好的,以下是使用C语言编写的快速排序算法:
```
#include <stdio.h>
// 交换数组中的两个元素
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
// 选择最后一个元素作为枢轴,将数组分为两部分并返回枢轴的位置
int partition(int arr[], int low, int high) {
int pivot = arr[high];
int i = low - 1;
for (int j = low; j < high; 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 pivotIndex = partition(arr, low, high);
quickSort(arr, low, pivotIndex - 1);
quickSort(arr, pivotIndex + 1, high);
}
}
// 打印数组
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int arr[] = {10, 7, 8, 9, 1, 5};
int n = sizeof(arr) / sizeof(arr[0]);
printf("原始数组为:");
printArray(arr, n);
quickSort(arr, 0, n-1);
printf("排序后的数组为:");
printArray(arr, n);
return 0;
}
```
该算法的时间复杂度为 $O(n \log n)$,其中 $n$ 是数组的大小。
### 回答2:
快速排序是一种常用的排序算法,其基本思想是通过选择一个基准元素,将待排序数组分成两个子数组,其中一个子数组的所有元素都小于等于基准元素,另一个子数组的所有元素都大于基准元素,然后分别对两个子数组进行快速排序,直到整个数组有序。
快速排序的算法步骤如下:
1. 选择一个基准元素(可以是数组中的任意一个元素),记为pivot。
2. 划分过程:将数组中所有小于等于pivot的元素放到pivot的左边,将大于pivot的元素放到pivot的右边。此时,pivot所在的位置就是其最终的位置。可以使用两个指针i和j,初始化时分别指向数组的第一个元素和最后一个元素,然后不断移动指针i和指针j,直到i和j相遇。在移动指针的过程中,如果发现arr[i]大于pivot且arr[j]小于等于pivot,则交换arr[i]和arr[j]的位置。
3. 递归地对pivot左边的子数组和右边的子数组进行快速排序。
以下是用Python语言实现的快速排序的代码:
def quickSort(arr):
if len(arr) <= 1:
return arr
else:
pivot = arr[0]
less = [x for x in arr[1:] if x <= pivot]
greater = [x for x in arr[1:] if x > pivot]
return quickSort(less) + [pivot] + quickSort(greater)
arr = [9, 2, 5, 1, 7, 6, 3, 8, 4]
sorted_arr = quickSort(arr)
print(sorted_arr)
运行结果为:[1, 2, 3, 4, 5, 6, 7, 8, 9],表示数组按照从小到大的顺序排列好了。快速排序的时间复杂度为O(nlogn),是一种高效的排序算法。
### 回答3:
快速排序是一种经典的排序算法,其基本思想是通过不断地对待排序序列进行划分,使得划分后左边的元素都小于等于选定的基准值,右边的元素都大于等于选定的基准值,然后再分别对左右两个子序列进行递归快速排序。
具体的实现步骤如下:
1. 选取基准值:从待排序序列中选择一个基准值,通常是选择第一个元素。
2. 划分操作:将序列分为两部分,左边的元素都小于等于基准值,右边的元素都大于等于基准值。可以使用双指针的方式,在左右两端同时向中间进行扫描,交换不满足条件的元素。
3. 递归排序:对左右两个子序列进行递归排序,重复以上步骤,直到子序列的长度为1或0。
4. 合并结果:将左右两个子序列合并。
以下是一个使用Python语言实现的快速排序示例代码:
```python
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[0] # 选取第一个元素作为基准值
left = [x for x in arr[1:] if x <= pivot] # 小于等于基准值的元素放在左边
right = [x for x in arr[1:] if x > pivot] # 大于基准值的元素放在右边
return quick_sort(left) + [pivot] + quick_sort(right) # 递归排序左右两个子序列,并将结果合并
arr = [5, 2, 9, 1, 7, 6, 3, 8, 4]
sorted_arr = quick_sort(arr)
print(sorted_arr)
```
以上代码将会输出:[1, 2, 3, 4, 5, 6, 7, 8, 9],表示经过快速排序后,原数组arr中的元素按照从小到大的顺序排列。
阅读全文