数据量很大的排序问题 大量数据如何排序
同学某天参加腾讯面试,技术面的时候,面试官问了排序问题:
问题一:若有1T的数据,需要实现由大到小排序,你用什么办法,说说你的思路和想法?
问题二:有10个G的数据,如果两条数据一样,则表示该两条数据重复了,现在给你512的内存,把这10G中重复次数最高的10条数据取出来。
分析:问题一和问题二思路基本是一样的,对于这种题目,利用常规的排序方法(如插入排序,快速排序……),自然是不能解决问题的!因此数据量太大。注意内部排序和外部排序的区别
排序算法分为内部排序和外部排序:
(1)内部排序:指的是待排序记录存放在计算机随机存储器(内存)中进行的排序过程;我们熟悉常用的冒泡排序,选择排序,插入排序,快速排序,堆排序,归并排序,希尔排序……等都属于内部排序方法;
(1)内部排序:指的是待排序记录存放在计算机随机存储器(内存)中进行的排序过程;我们熟悉常用的冒泡排序,选择排序,插入排序,快速排序,堆排序,归并排序,希尔排序……等都属于内部排序方法;
内部排序算法的比较:
(2)外部排序:指的是待排序记录的数量很大,以致内存一次不能容纳全部记录,在排序过程中需要对外存进行访问的排序过程;
基本思路:外部排序指的是大文件的排序,即待排序的记录存储在外部存储器上,在排序过程中需进行多次的内、外存之间的交换。首先将打文件记录分成若干个子文件,然后读入内存中,并利用内部排序的方法进行排序;然后把排序好的有序子文件(称为:归并段)重新写入外存,再对这些归并段进行逐个归并,直到整个有序文件为止。
例子:假设有10 000个记录的文件需要排序,则先把这10 000个记录文件分成10个归并段(R1…~R10,每段1000个记录),然后逐个读入归并段进行内部排序(共10次),然后把排序好的归并段重新写入外存中,再进行两两归并,直到得到一个有序文件为止。
例子:假设有10 000个记录的文件需要排序,则先把这10 000个记录文件分成10个归并段(R1…~R10,每段1000个记录),然后逐个读入归并段进行内部排序(共10次),然后把排序好的归并段重新写入外存中,再进行两两归并,直到得到一个有序文件为止。
先来看看各位大神对问题解答:http://bbs.csdn.net/topics/390360278?page=1
思路一:
思路二:
依此类推,得出最终结果
来源:http://blog.csdn.net/guyuealian/article/details/51151674