问题描述:
输入:一个最多含有n个不重复的正整数(也就是说可能含有少于n个不重复正整数)的文件,其中每个数都小于等于n,且n=10^7。
输出:得到按从小到大升序排列的包含所有输入的整数的列表。
条件:最多有大约1MB的内存空间可用,但磁盘空间足够。
1、内存排序
要求的可用内存为1MB,那么每次可以在内存中对250K的数据进行排序,然后将有序的数写入硬盘。 ///是250K个整数,也就是说大约1000KB大约1MB空间
那么10M的数据需要循环40次,最终产生40个有序的文件。
2、归并排序
- 将每个文件最开始的数读入(由于有序,所以为该文件最小数),存放在一个大小为40的first_data数组中;
- 选择first_data数组中最小的数min_data,及其对应的文件索引index;
- 将first_data数组中最小的数写入文件result,然后更新数组first_data(根据index读取该文件下一个数代替min_data);
- 判断是否所有数据都读取完毕,否则返回2。
摘自:http://blog.youkuaiyun.com/v_JULY_v/article/details/6451990
补充:2归并排序中的3,根据index读取该文件下一个数代替min_data的时候,如果index对应的文件已经没数了,那么用正无穷代替min_data
2归并排序中的4判断所有数据是否读完的方法就是判断是否所有元素都是正无穷
最终result文件中是一个从小到大排好顺序的结果文件