如何使用C语言实现一个函数,对一组任意大小(n个)的整数从大到小进行排序?
时间: 2024-10-20 21:13:07 浏览: 13
在C语言中,可以使用经典的快速排序算法来对一组任意大小的整数进行降序排列。这里是一个简单的示例:
```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); // Index of smaller element
for (int j = low; j <= high - 1; j++) {
if (arr[j] > pivot) {
i++; // increment index of smaller element
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 pi = partition(arr, low, high);
quickSort(arr, low, pi - 1); // 递归处理左半部分
quickSort(arr, pi + 1, high); // 递归处理右半部分
}
}
// 测试函数
void printArray(int arr[], int size) {
int i;
for (i=0; i < size; i++)
printf("%d ", arr[i]);
printf("\n");
}
int main() {
int arr[] = {5, 9, 1, 7, 3};
int n = sizeof(arr)/sizeof(arr[0]);
quickSort(arr, 0, n-1);
printf("Sorted array in descending order:\n");
printArray(arr, n);
return 0;
}
```
这个程序首先定义了一个`quickSort`函数,通过分治策略递归地将数组划分为较小的部分并进行排序。`partition`函数用于找到基准值,并将数组分割成两部分。最后在`main`函数中创建一个测试数组,调用`quickSort`对其进行排序,然后打印结果。
阅读全文