对文件内容按字符单位进行排序(linux c)

本文介绍了一个使用C语言在Linux环境下按字符升序对文件内容进行排序的方法。通过读取文件,统计每个字符出现次数,然后将字符写入目标文件实现排序。示例代码包括`filesort.h`和`filesort.c`,并提供了编译及执行示例,展示对不同大小文件的排序耗时。
摘要由CSDN通过智能技术生成

RT:

前提:任意大小不超过4G的文件。

要求:对文件内容进行二进制排序,以升序为例


实现方法:

1.以字符为单位遍历源文件(source file)

2.用unsigned long arr[256]  中的每一位保存每个字符出现的个数(如读取到source中的一个字符的十六进制为0x01,则arr[0x01]++),最坏的情况4G文件保存的全部是一个十六进制值.unsigned long 刚好可以满足,这就是为什么定义成unsigned long 数组.

3.从arr[0x00]开始遍历arr,分别打印字符到目标文件(target file)中(如arr[0x05] 的值为5则向target file 写入5个0x05);

4.降序则从arr[255]开始反向遍历输出即可.


以下为具体实现:


filesort.h

#ifndef _FILE_SORT_H
#define _FILE_SORT_H

#define MAX_ARR_SIZE 256
#define BUFFER_SIZE 1024
int file_sort(const char *, const char *);

#endif /*_FILE_SORT_H*/


filesort.c


#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <errno
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值