(3)递归与分治法实现快速排序算法,输入一串以英文字符逗号隔开的数字,按升序排列法实现快速排序算法。(c语言)
时间: 2024-10-21 13:09:19 浏览: 29
在C语言中,递归和分治法可以结合来实现快速排序算法。快速排序是一种高效的排序算法,其基本思想是选取一个基准元素(pivot),将数组分为两部分,一部分所有元素都小于基准,另一部分所有元素都大于基准,然后对这两部分分别递归地进行排序。
以下是使用C语言实现的快速排序算法,针对输入的一串英文字符逗号隔开的数字:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 函数声明
void quicksort(char *arr, int low, int high);
int compare(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
void partition(char *arr, int low, int high) {
char pivot = arr[high]; // 选择最右边的元素作为基准
int i = (low - 1); // 小于基准的元素索引
for (int j = low; j <= high - 1; j++) {
if (compare(arr + j, &pivot) < 0) { // 比基准小就交换
i++;
swap(arr + i, arr + j);
}
}
swap(arr + i + 1, arr + high); // 将基准放到正确的位置
// i+1 是基准的新位置
}
void quicksort(char *arr, int low, int high) {
if (low < high) {
int pi = partition(arr, low, high); // 调用分区函数
quicksort(arr, low, pi - 1); // 对左半边递归排序
quicksort(arr, pi + 1, high); // 对右半边递归排序
}
}
void swap(char* a, char* b) {
char temp = *a;
*a = *b;
*b = temp;
}
int main() {
char str[] = "6,5,8,3,9,1"; // 输入的字符串数组
int len = strlen(str);
char *arr = malloc(len * sizeof(char));
// 将字符串转成整数数组
for(int i = 0; i < len; i++) {
arr[i] = str[i] - '0';
}
quicksort(arr, 0, len - 1); // 开始排序
printf("Sorted array: ");
for(int i = 0; i < len; i++) {
printf("%d,", arr[i]);
}
free(arr);
return 0;
}
阅读全文