C语言对于数组排序最好的方法
时间: 2024-01-06 14:05:34 浏览: 86
在 C 语言中,可以使用标准库函数 `qsort()` 来对数组进行排序,它的函数原型如下:
```c
void qsort(void *base, size_t nmemb, size_t size,
int (*compar)(const void *, const void *));
```
其中,`base` 参数是待排序数组的首元素地址,`nmemb` 参数是数组中元素的个数,`size` 参数是数组中每个元素的大小,`compar` 参数是用于比较两个元素大小的回调函数。
例如,如果要按照整数从小到大的顺序对一个整型数组进行排序,可以使用以下代码:
```c
#include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b) {
return *(int*)a - *(int*)b;
}
int main() {
int arr[] = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
int n = sizeof(arr) / sizeof(int);
qsort(arr, n, sizeof(int), compare);
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
输出结果为:`1 1 2 3 3 4 5 5 5 6 9`
如果要按照字符串字典序对一个字符串数组进行排序,可以使用以下代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int compare(const void *a, const void *b) {
return strcmp(*(const char**)a, *(const char**)b);
}
int main() {
char *arr[] = {"banana", "apple", "cherry", "date"};
int n = sizeof(arr) / sizeof(char*);
qsort(arr, n, sizeof(char*), compare);
for (int i = 0; i < n; i++) {
printf("%s ", arr[i]);
}
return 0;
}
```
输出结果为:`apple banana cherry date`
需要注意的是,回调函数的参数类型是 `const void*`,需要进行强制类型转换。此外,`qsort()` 函数是原地排序,即直接修改原数组。如果需要保留原数组,可以先创建一个副本再进行排序。
阅读全文