排序与海量数据处理

(一).三种常见的N*logN排序算法

1.堆排序

想:利用完全二叉树的特性,某结点(如下标i)的父结点下标(i – 1) / 2,左右子结点下标分别为2 * i + 1和2 * i + 2。

思路:从第一个非叶子节点往根节点开始,逐步调整。


2.快速排序

思想:选取一个基点,从数组最后一个节点开始逐一与基点比较,如果比其小则继续迁移,否则调换位置并从前开始逐一与基点比较,如果比基点小则继续,如果比基点大则对调。


3.归并排序(外部排序)

思想:对两个已经有序的子数组只需要遍历一遍(O(N)复杂度)即可合并成一个有序的数组。

思路:将数组分成二个子数组A,B,如果这二组组内的数据都是有序的,那么就可以O(N)复杂度将这二组数据进行排序。如何让这二组组内数据有序了?

可以将A,B组各自再分成二组。依次类推,当分出来的小组只有一个数据时,可以认为这个小组组内已经达到了有序,然后再合并相邻的二个小组就可以了。这样通过先递的分解数列,再合数列就完成了归并排序。


(二).海量数据top K的处理思路

1.外部排序

外部排序指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存,需要在内存和外部存储器之间进行多次数据交换,以达到排序整个文件的目的。外部排序最常用的算法是多路归并排序,即将原文件分解成多个能够一次性装入内存的部分,分别把每一部分调入内存完成排序。然后,对已经排序的子文件进行多路归并排序。

步骤:

A.按可用内存的大小,把外存上含有n个记录的文件分成若干个长度为L的子文件,把这些子文件依次读入内存,并利用有效的内部排序方法对它们进行排序,再将排序后得到的有序子文件重新写入外存;
B.对这些有序子文件逐趟归并,使其逐渐由小到大,直至得到整个有序文件为止。

2.海量数据处理常用思路

http://blog.csdn.net/u012289441/article/details/45192775

http://xingyunbaijunwei.blog.163.com/blog/static/7653806720111149318357


(三).hashMap与bitSet




你可能感兴趣的:(排序与海量数据处理)