c 语言一维数组排序方法
时间: 2025-05-09 11:17:34 浏览: 22
在一维数组排序方面,C语言提供了多种经典的算法可供选择。下面介绍一种简单直接的方式——冒泡排序法,并结合C标准库函数`qsort()`的使用。
### 冒泡排序
这是一种基础而易于理解的排序方法。其基本思想是通过不断比较相邻元素并交换位置,将较大的数逐步“浮”到序列的一端。
**步骤:**
1. 比较相邻的两个数据项。
2. 如果前一项比后一项大,则交换它们的位置。
3. 对每一对相邻元素做同样的工作,从开始第一对直到最后的一对。
4. 针对该数组重复上述步骤共n-1次(对于长度为n的数组),最终完成排序。
示例代码片段:
```c
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
// 第i趟排序
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
// 互换顺序
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
```
### 使用 `qsort()`
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 cmpfunc(const void * a, const void * b){
return (*(int*)a - *(int*)b);
}
int main(){
int values[] = {87, 65, 91, 23, 4};
int length = sizeof(values)/sizeof(*values);
printf("原始数组:");
for(int k=0;k<length;++k)
printf("%d ",values[k]);
putchar('\n');
qsort(values,length,sizeof(int),cmpfunc);
printf("排序后的数组:");
for(int l=0;l<length;++l)
printf("%d ",values[l]);
return 0;}
```
运行结果将是按照从小到大的顺序输出所有数字值。
阅读全文
相关推荐











