20191323王予涵sort

sort

任务

  1. 用man sort 查看sort的帮助文档
  2. sort常用选项有哪些,都有什么功能?提交相关使用的截图
  3. 如果让你编写sort,你怎么实现?写出伪代码和相关的函数或系统调用

一、查看帮助文档

二、基本功能使用

  • -t [分隔字符]: 指定排序时所用的栏位分隔字符

  • -k [filed]: 按指定的列进行排序

  • -n: 依照数值的大小排序,该选项不单独使用,一般放在域号之后

  • -r: 以相反的顺序来排序

  • -u: 去掉排序结果中的重复行

  • -o<输出文件>: 将排序后的结果存入指定的文件

  • -c: 检查文件是否已经按照顺序排序

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
}

链表处理函数
{
	插入
	删除
}


posted @ 2021-09-27 22:16  WangYuHan20191323  阅读(13)  评论(0编辑  收藏  举报