用man sort 查看sort的帮助文档

sort(Linux练习)_c语言

sort常用选项和功能、sort使用

sort常用选项和功能

​-t​​用于指定域的分隔符。单独使用时:​​空格:abc:空格​​若不指定分隔符为​​:​​则是一个域。若使用​​-t:​​指定​​:​​为分隔符则分成了3个域。
​-k​​用于指定排序使用的域。如:​​sort -t: -k3 test.txt​​就使用第三个域(数字)进行排列,但要注意这时仍然使用的是字符串比较进行的排序。如下图:
​-n​​用于表示使用数值大小进行排序,如同上图时,若加入​​-n​​,就会按照数的大小排序。
​-r​​结果逆向显示,从大到小。
​-u​​去掉重复行后再进行排序。
​-o​​将结果存到文件中。
​-c​​代表测试这个文件是否已经排序。如果是按照给定参数有序的,就无输出,否则输出第一条不符合排序的记录。

sort使用截图

测试文档是微信读书上一些电脑和品牌型号的一个文档:

test.txt:

ThinkPad:USA:14000:2009:X301
ThinkPad:HongKong:10000:2008:T400
ThinkPad:USA:8000:2007:X60
HP:China:5600:2010:DM3
HP:China:12000:2010:NE808
SumSung:Korea:5400:2009:Q308
IdeaPad:China:8000:2007:U450
Acer:Taiwan:8000:2010:PT210


​sort -t: -k3 test.txt​​以​​:​​为分隔,以第三个域为标准,字符串方式排序:

sort(Linux练习)_linux_02

​sort -t: -k3 -n test.txt​​以​​:​​为分隔,以第三个域为标准,数值大小方式排序:

sort(Linux练习)_代码实现_03

​sort -t: -k3 -n -r test.txt​​以​​:​​为分隔,以第三个域为标准,数值大小方式反序排序:

sort(Linux练习)_c语言_04

​sort -t: -k3 -n -r test.txt -o result.txt​​以​​:​​为分隔,以第三个域为标准,数值大小方式反序排序并将结果存在result.txt中:

sort(Linux练习)_c语言_05

测试文件是否按照以上规则有序:

sort(Linux练习)_linux_06

实现sort的方法和过程

1.尝试寻找可以使用的系统调用或C库函数

终端输入​​man -k sort | grep 2​​和​​man -k sort | grep 3​

sort(Linux练习)_c语言_07

从图中可以看到,C语言函数库中的​​qsort​​和​​qsort_r​​就很可能可以实现我们的功能,可以直接用。

2.进一步了解​​qsort​​和​​qsort_r​

使用​​man qsort​​查看qsort功能和用法。

sort(Linux练习)_分隔符_08

通过阅读qsort的manual信息,我们了解到qsort可以进行快速排序。需要传入的参数有待排数组、待排序的单位大小、单位个数、排序的比较函数的函数指针。

3.编写伪代码实现

利用刚刚用man学到的知识和以前的C语言、文件读写知识,用以下代码实现了mysort。

#include <stdio.h>
#include <stdlib.h>

int values[128];

int compare(const void * a, const void * b)
{
return (*(int *)a - *(int *)b);
}

int main(int argc, char* argv[])
{
int i,k;
FILE* fp;
if(argc!=2){
printf("参数错误,请传入一个文件名。\n");
return -1;
}
fp=fopen(argv[1],"r");
if(fp==NULL){
printf("无法打开文件!\n");
return -1;
}
for(k=0;k<128;k++){
if(fscanf(fp,"%d",&values[k])==0)
break;
if(values[k]==0)
break;
}
qsort(values,k, sizeof(int), compare);
for (i = 0; i < k; i++){
printf("%d ", values[i]);
}
putchar('\n');
return 0;
}


代码对一行文件进行数值排序,以0为结束符。



整体使用课上的学习方法进行了完成,总体对结合man的linux的学习方法有一定收获。

4.运行截图:

sort(Linux练习)_代码实现_09