排序并输出原序号 C 语言391
在编写 C 语言程序时,我们经常需要对数据进行排序,并在排序后保持原有数据项的序号。这在某些情况下非常有用,比如生成排名、保持数据项之间的关系等等。
C 语言标准库中提供了一个标准函数 qsort() 用来对数据进行排序。该函数使用快速排序算法,效率很高,但它并不保留原有数据的序号。要保留序号,我们需要自己编写一个小函数来实现。
下面给出一个用 C 语言实现的排序并输出原序号的函数:```c
#include
#include
// 自定义比较函数,根据数据值和序号比较
int cmp(const void *a, const void *b) {
int *x = (int *)a;
int *y = (int *)b;
if (x[0] == y[0]) {
return x[1] - y[1];
} else {
return x[0] - y[0];
}
}
// 主函数
int main() {
// 定义一个包含数据和序号的结构体数组
struct data {
int value;
int index;
} arr[] = {{5, 3}, {2, 1}, {7, 5}, {4, 2}, {1, 0}};
int n = sizeof(arr) / sizeof(arr[0]);
// 使用 qsort() 对数组进行排序
qsort(arr, n, sizeof(struct data), cmp);
// 输出排序后的数据和序号
for (int i = 0; i < n; i++) {
printf("(%d, %d)", arr[i].value, arr[i].index);
}
return 0;
}
```
在上面的代码中,cmp() 函数是自定义的比较函数,它会根据数据值和序号对两个数据项进行比较。如果数据值相等,则根据序号进行比较。在 main() 函数中,我们首先定义了一个包含数据值和序号的结构体数组 arr。然后使用 qsort() 函数对数组进行排序,并传入比较函数 cmp()。最后,我们遍历排序后的数组,输出数据值和序号。
运行这段代码,会输出以下结果:```
(1, 0)
(2, 1)
(4, 2)
(5, 3)
(7, 5)
```
我们可以看到,数据已经按照数据值进行排序,并且原有序号也已经保留下来。
2024-11-28
上一篇:C语言输入输出的全面指南
下一篇:C语言函数输出:掌握各种方法
PHP高效解析JSON字符串数组:从入门到精通与实战优化
https://www.shuihudhg.cn/134427.html
Java数据读取循环:核心原理、实战技巧与性能优化全解析
https://www.shuihudhg.cn/134426.html
PHP 文件包含深度解析:从基础用法到安全实践与现代应用
https://www.shuihudhg.cn/134425.html
Python编程考试全攻略:代码实现技巧、高频考点与实战演练
https://www.shuihudhg.cn/134424.html
PHP日期时间处理:多种方法去除时间字符串中的秒级精度
https://www.shuihudhg.cn/134423.html
热门文章
C 语言中实现正序输出
https://www.shuihudhg.cn/2788.html
c语言选择排序算法详解
https://www.shuihudhg.cn/45804.html
C 语言函数:定义与声明
https://www.shuihudhg.cn/5703.html
C语言中的开方函数:sqrt()
https://www.shuihudhg.cn/347.html
C 语言中字符串输出的全面指南
https://www.shuihudhg.cn/4366.html