postgresql-排序

postgresql的排序。
1.是根据排序数据量的大小来判断,如果数据量少到能够整体放到内存的话,就直接快速排序,
2.数据量较大内存放不下,但是所需要返回的元组内存可以装下或者TOP N的性能比快排好的话,TOP N类型的算法走起(这里是堆排序),;
3.数据量很大,并且返回的元组内存也放不下的话,外部归并排序走起。
 
快排和速排都是非稳定算法,这也是小数据量和top的时候如果有相同的值,两次查询的结果可能顺序不一样。如果数据量大,使用了外部归并排序那么每次的结果都将一样。
 
排序算法总结
 
堆排序的思想是,先构造一个大顶堆,堆排序是一种选择排序,他的最坏最好平均时间复杂度均为O(nlogn),是一种非稳定排序。循环删除堆顶元素(堆顶元素最大。),移到集合尾部,调节堆产生新的堆顶。
 
堆排序和快速排序都是O(nlogn),都是不稳定排序。快速排序的最坏时间复杂度为O(n^2),而堆排序最坏时间复杂度稳定在O(nlogn)
 
堆排序可以看成完全二叉树,大顶堆是最大的元素,删除该元素,将该元素移到集合尾部,然后产生新的堆顶,不断的重复这个过程,最终完成排序。
快速排序使用分治法,将数据分成前后两块,找一个基准数,先从后面开始向前扫描找到小于基准数,然后从前向后扫描找一个大于基准数的数,然后将两者交换位置,不断的重复这个过程,最终完成排序。
posted @ 2019-01-03 19:27  月图灵  阅读(1890)  评论(0编辑  收藏  举报