使用C语言编写数组降序排列,要求实现一个函数,对给定数组进行降序排列(即从大到小排序),可任选排序算法
时间: 2024-10-24 09:08:51 浏览: 21
在C语言中,我们可以选择冒泡排序、快速排序或者归并排序等算法来对数组进行降序排列。这里我将提供一个快速排序算法的实现,它是一种效率较高的排序方法。
首先,我们要创建一个名为`quick_sort_descending`的函数,接受一个整数数组`arr`和数组长度`n`作为参数:
```c
#include <stdio.h>
// 冒泡法降序比较
int compare(const void *a, const void *b) {
return (*(const int*) b - *(const int*) a); // 后者大于前者返回正,反之负
}
// 快速排序的递归函数
void quick_sort_descending(int arr[], int low, int high) {
if (low < high) {
int pivot_index = partition(arr, low, high); // 分区并找到基准元素的最终位置
quick_sort_descending(arr, low, pivot_index - 1); // 对左半部分进行递归排序
quick_sort_descending(arr, pivot_index + 1, high); // 对右半部分进行递归排序
}
}
// 分区函数,用于找到基准元素的最终位置
int partition(int arr[], int low, int high) {
int pivot = arr[high]; // 基准元素放在最后一位
int i = (low - 1); // i 指向前一个元素
for (int j = low; j <= high - 1; j++) {
if (compare(arr + j, &pivot) > 0) { // 如果当前元素比基准大,交换它们的位置,并更新i
i++;
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i + 1], &arr[high]); // 将基准元素放到最终位置
return (i + 1);
}
// 交换两个元素的函数
void swap(int *xp, int *yp) {
int temp = *xp;
*xp = *yp;
*yp = temp;
}
void print_array(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int arr[] = {5, 3, 8, 1, 9, 4};
int n = sizeof(arr) / sizeof(arr[0]);
printf("Original array: ");
print_array(arr, n);
quick_sort_descending(arr, 0, n - 1);
printf("Sorted array in descending order: ");
print_array(arr, n);
return 0;
}
```
上述代码实现了快速排序算法,对输入数组进行了降序排列。当你运行main函数时,它会显示原数组和排序后的数组。
阅读全文