20191226刘煊赫

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

1.用man sort查看sort的帮助文档

 

 2.

sort常用选项有哪些,都有什么功能?提交相关使用的截图
sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCAII值进行比较,最后将它们按升序输出。

 

 -u意味着是唯一的,输出的结果是去完重了的。

 

 -r以相反的顺序来排序

 

 3.如果让你编写sort,你怎么实现?写出伪代码和相关的函数或系统调用

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define n 32
typedef struct student{
long number;
char name[50];
int math;
int chinese;
int sum;
}STU;
STU arr[n];
int cmp1(const void *a, const void *b)
{
int number1=((STU *)a)->number;
int number2=((STU *)b)->number;
return number1>number2?1:-1;
}
int cmp2(const void *a, const void *b)
{
char *s1=((STU *)a)->name;
char *s2=((STU *)b)->name;
return strcmp(s1,s2);
}
int cmp3(const void *a, const void *b)
{
int number1=((STU *)a)->math;
int number2=((STU *)b)->math;
return number1>number2?1:-1;
}

int cmp4(const void *a, const void *b)
{
int number1=((STU *)a)->chinese;
int number2=((STU *)b)->chinese;
return number1>number2?1:-1;
}

int cmp5(const void *a, const void *b)
{
int number1=((STU *)a)->sum;
int number2=((STU *)b)->sum;
return number1>number2?1:-1;
}
int main(int argc,char *argv[]){
FILE *fp;
char txt[100];
scanf("%s",txt);
if((fp=fopen(txt,"r"))==NULL)
{
printf("open file failure!");
return 0;
}
int i=0,j=0;
while( fscanf(fp,"%ld %s %d %d %d",&arr[i].number,arr[i].name,&arr[i].math,&arr[i].chinese,&arr[i].sum)!=EOF)
{

i++;
}
printf("which line do you want sort?");
int c;
scanf("%d",&c);
if(c==1)
qsort(arr,i,sizeof(struct student),cmp1);
else if(c==2)
qsort(arr,i,sizeof(struct student),cmp2);
else if(c==3)
qsort(arr,i,sizeof(struct student),cmp3);
else if(c==4)
qsort(arr,i,sizeof(struct student),cmp4);
else if(c==5)
qsort(arr,i,sizeof(struct student),cmp5);
else
return -1;
for( j=0;j<i;j++)
printf("%ld %s %d %d %d\n",arr[j].number,arr[j].name,arr[j].math,arr[j].chinese,arr[j].sum);
return 0;

}

 

posted on 2021-09-27 23:12  20191226刘煊赫  阅读(21)  评论(0编辑  收藏  举报