用c语言写递归与分治法实现快速排序算法,输入一串以英文字符逗号隔开的数字,按升序排列法实现快速排序算法。
时间: 2024-09-29 20:09:56 浏览: 52
在C语言中,快速排序是一种常见的分治算法,其基本思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,然后分别对这两部分记录继续进行排序,直到整个序列有序。以下是使用递归实现快速排序的一个简单版本,针对字符串中包含的整数数组进行升序排列:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 将字符串转换为整数数组
int* string_to_int_array(char *str, int *size) {
char *token = strtok(str, ",");
*size = 0;
while (token != NULL) {
(*size)++;
token = strtok(NULL, ",");
}
int *arr = malloc(*size * sizeof(int));
for (int i = 0; i < *size; i++) {
arr[i] = atoi(token);
token = strtok(NULL, ",");
}
return arr;
}
// 快速排序函数
void quicksort(int *array, int low, int high) {
if (low < high) {
int pivot_index = partition(array, low, high);
quicksort(array, low, pivot_index - 1);
quicksort(array, pivot_index + 1, high);
}
}
// 划分函数
int partition(int *array, int low, int high) {
int pivot = array[high];
int i = low - 1;
for (int j = low; j <= high - 1; j++) {
if (array[j] < pivot) {
i++;
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
int temp = array[i + 1];
array[i + 1] = array[high];
array[high] = temp;
return i + 1;
}
// 主函数处理用户输入并显示结果
int main() {
char str[] = "5,2,8,3,9,1,6"; // 用户输入的字符串
int size;
int *numbers = string_to_int_array(str, &size);
quicksort(numbers, 0, size - 1);
printf("Sorted array: ");
for (int i = 0; i < size; i++) {
printf("%d", numbers[i]);
if (i != size - 1) {
printf(", ");
}
}
free(numbers); // 释放内存
return 0;
}
```
阅读全文