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