排序问题——其他排序问题的研究

目录

  • 1.大型结构的排序
  • 2.外部排序
    2.1 基于磁盘的归并排序
    2.2 编程珠玑上的排序问题(没有重复的数据)

1.大型结构的排序

在对大型结构进行排序时,可以通过让输入数组包含指向结构的指针实现。
通过比较指针指向的关键字,并在必要时交换指针来进行排序。

2.外部排序

外部排序指的是,存在一些应用,输入的数据量太大不能装进内存。

2.1 基于磁盘的归并排序

假设文件中整数个数为N(N是亿级的),整数之间用空格分开。首先分多次从该文件中读取M(十万级)个整数,每次将M个整数在内存中使用快速排序之后存入临时文件,然后使用多路归并将各个临时文件中的数据再次整体排好序后存入输出文件。显然,该排序算法需要对每个整数做2次磁盘读和2次磁盘写。

这里是不是可以充分利用缓存、内存,一次性从每个文件读入M/D,其中M为内存总数,D为多路结果的个数。

将每个文件最开始的数读入(由于有序,所以为该文件最小数),存放在一个大小为40的first_data数组中;
选择first_data数组中最小的数min_data,及其对应的文件索引index;
将first_data数组中最小的数写入文件result,然后更新数组first_data(根据index读取该文件下一个数代替min_data);
判断是否所有数据都读取完毕,否则返回2。

2.2 编程珠玑上的排序问题(没有重复的数据)

排序问题——其他排序问题的研究_第1张图片

解法的伪代码:


排序问题——其他排序问题的研究_第2张图片

1)使用位逻辑运算实现位向量


排序问题——其他排序问题的研究_第3张图片

2)实现位图排序


排序问题——其他排序问题的研究_第4张图片

3)怎样限制内存使用量


排序问题——其他排序问题的研究_第5张图片

参考《编程珠玑》
参考:http://blog.csdn.net/v_JULY_v/article/details/6451990
参考:http://blog.csdn.net/v_JULY_v/article/details/6279498

你可能感兴趣的:(排序问题——其他排序问题的研究)