sort
任务
用man sort 查看sort的帮助文档
sort常用选项有哪些,都有什么功能?提交相关使用的截图
如果让你编写sort,你怎么实现?写出伪代码和相关的函数或系统调用
一、查看帮助文档
二、基本功能使用
-t [分隔字符]: 指定排序时所用的栏位分隔字符
-k [filed]: 按指定的列进行排序
-n: 依照数值的大小排序,该选项不单独使用,一般放在域号之后
-r: 以相反的顺序来排序
-u: 去掉排序结果中的重复行
sort实现
相关函数: fopen(), fread(),fwrite()
行结构体
{
char* buff
int lines
}
主函数 int agrc char* agrv[]
{
char line*
long 行数
FILE* fp
fp = fopen()
行数 = 行数获取函数(line,fp)
行结构体写入函数
(*p)(指向链表头节点指针)
for(int i = 2; i < agrc; i++)
{
switch agrv[i]
case -t
调用栏位分隔字符函数
break
case -n
调用字符串转换函数atoi()
break
case -r
p = 倒序插入排序
(*p)(指向链表头节点指针)
break
case -u
调用删除重复项函数
break
case -o
调用输出排序后文件函数fwrite(),需等待排序线程结束
break
default:
p = 插入排序
(*p)(指向链表头节点指针)
break
}
}
行数 行数获取函数 char line* fp
{
调用函数fread()
获取行数
line = (char*)malloc(sizeof(char)*行数)
将每行大小写入数组
返回行数
}
写入失败行数 行结构体写入及链表生成函数 char *line 行数
{
for(int i = 1;i != 行数;i++)
{
分配每行结构体大小
按行写入结构体
if(写入失败)
return 结构体.行数
用尾插法插入链表
}
return 0
}
链表处理函数
{
插入
删除
}