zoukankan      html  css  js  c++  java
  • sort(Linux练习)

    用man sort 查看sort的帮助文档

    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 -t: -k3 -n test.txt:为分隔,以第三个域为标准,数值大小方式排序:

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

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

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

    实现sort的方法和过程

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

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

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

    2.进一步了解qsortqsort_r

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

    通过阅读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("参数错误,请传入一个文件名。
    ");
        	return -1;
        }
        fp=fopen(argv[1],"r");
        if(fp==NULL){
        	printf("无法打开文件!
    ");
        	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('
    ');
        return 0;
    }
    

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


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

    4.运行截图:

    代码链接

    https://gitee.com/Ressurection20191320/code/tree/master/IS/mysort

  • 相关阅读:
    图解设计模式-Visitor模式
    图解设计模式-Decorator模式
    图解设计模式-Strategy模式
    图解设计模式-Bridge模式
    HashMap源码
    LinkedList源码
    Vector源码
    ArrayList源码
    图解设计模式-Abstract Factory模式
    图解设计模式-Builder模式
  • 原文地址:https://www.cnblogs.com/Ressurection-20191320/p/15345037.html
Copyright © 2011-2022 走看看