C语言对未知个数字进行排序
时间: 2024-12-12 22:21:39 浏览: 17
在C语言中,对未知数量的数字进行排序通常需要动态内存分配,并利用标准库函数如`qsort`或自定义排序算法。这里以快速排序为例来说明,因为它的性能较好且适用于任意大小的数组:
```c
#include <stdio.h>
#include <stdlib.h>
// 自定义比较函数
int compare(const void *a, const void *b) {
return (*(int *)a - *(int *)b);
}
void quick_sort(int *arr, int n) {
if (n <= 1)
return;
int pivot = arr[n / 2];
int *less = malloc(n * sizeof(int));
int *greater = malloc(n * sizeof(int));
int i = 0, j = n - 1, k = 0;
while (i <= j) {
while (arr[i] < pivot && i < n)
i++;
while (arr[j] > pivot)
j--;
if (i <= j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
for (int x = i; x < n; x++)
less[k++] = arr[x];
for (int x = 0; x < i; x++)
greater[k++] = arr[x];
free(less);
free(greater);
// 递归地对子数组进行排序
quick_sort(arr, i);
quick_sort(arr + i, n - i);
}
int main() {
int num_count; // 未知数量的数字
printf("Enter the number of elements: ");
scanf("%d", &num_count);
int *numbers = malloc(num_count * sizeof(int)); // 动态分配内存
printf("Enter the numbers: ");
for (int i = 0; i < num_count; i++) {
scanf("%d", &numbers[i]);
}
quick_sort(numbers, num_count); // 对数组进行排序
printf("Sorted array: ");
for (int i = 0; i < num_count; i++) {
printf("%d ", numbers[i]);
}
printf("\n");
free(numbers); // 释放内存
return 0;
}
```
在这个例子中,我们首先获取输入的数字数量和数值,然后动态分配内存存储数据。接着调用`quick_sort`函数进行排序,最后显示已排序的数组并释放动态分配的内存。
阅读全文