C语言中可以任意基准值的快速排序算法如何编写
时间: 2023-07-18 17:19:01 浏览: 96
快速排序是一种基于比较的排序算法,其基本思想是通过分治的策略将一个序列分成较小和较大的两个子序列,然后递归地排序两个子序列。
以下是基于任意基准值的C语言快速排序算法的实现:
```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--; // 从右往左找到第一个小于基准值的元素
if(i < j) arr[i++] = arr[j];
while(i < j && arr[i] < pivot) i++; // 从左往右找到第一个大于等于基准值的元素
if(i < j) arr[j--] = arr[i];
}
arr[i] = pivot; // 将基准值放到正确的位置
quicksort(arr, left, i - 1); // 递归排序左半部分
quicksort(arr, i + 1, right); // 递归排序右半部分
}
```
调用方式为 `quicksort(arr, 0, len - 1)`,其中 `arr` 是要排序的数组,`len` 是数组的长度。
相关问题
C语言中任意基准值的快速排序算法
快速排序是一种基于比较的排序算法,其基本思想是通过分治的策略将一个序列分成较小和较大的两个子序列,然后递归地排序两个子序列。
以下是基于任意基准值的C语言快速排序算法的实现:
```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--; // 从右往左找到第一个小于基准值的元素
if(i < j) arr[i++] = arr[j];
while(i < j && arr[i] < pivot) i++; // 从左往右找到第一个大于等于基准值的元素
if(i < j) arr[j--] = arr[i];
}
arr[i] = pivot; // 将基准值放到正确的位置
quicksort(arr, left, i - 1); // 递归排序左半部分
quicksort(arr, i + 1, right); // 递归排序右半部分
}
```
调用方式为 `quicksort(arr, 0, len - 1)`,其中 `arr` 是要排序的数组,`len` 是数组的长度。
帮我用c语言实现一下为题:快速排序算法的实现。任意输入20个整数,对这20个整数进行快速排序。要求使用末元素作为划分基准
好的,以下是C语言实现快速排序算法的代码:
#include <stdio.h>
void quickSort(int arr[], int left, int right) {
if (left < right) {
int i = left, j = right, pivot = arr[right];
while (i < j) {
while (i < j && arr[i] <= pivot) i++;
if (i < j) arr[j--] = arr[i];
while (i < j && arr[j] >= pivot) j--;
if (i < j) arr[i++] = arr[j];
}
arr[j] = pivot;
quickSort(arr, left, j - 1);
quickSort(arr, j + 1, right);
}
}
int main() {
int arr[20], i;
printf("请输入20个整数:\n");
for (i = 0; i < 20; i++) {
scanf("%d", &arr[i]);
}
quickSort(arr, 0, 19);
printf("排序后的结果为:\n");
for (i = 0; i < 20; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
希望这个代码能够帮到你。
阅读全文