相关文章推荐
爱看球的杨桃  ·  3.23 ...·  1 年前    · 
绅士的电脑桌  ·  技术分享 | ...·  2 年前    · 
打酱油的豆芽  ·  Unity3D ...·  2 年前    · 
潇洒的伤疤  ·  如何从PostgreSQL ...·  2 年前    · 
苦闷的手术刀  ·  System.Web.Optimizatio ...·  2 年前    · 

堆排序和快速排序的比较

堆排序是接近nlgn的下界,而快排有性能坏的情况,为何还是快排表现更优秀呢?

1.堆排序是处理数组中相隔较远的数据,快速排序是根据两个 指针按序遍历的,根据寄存器、高速缓存的热cache、 局部性原理,快排更好

2.快排的极端情况太难复现,而且可以 用随机基准数

3.快排还有各种优化的方案

基数排序的性能

在低数据量的时候,性能很不错;但是非常占内存。一般我们不会采取高内存换空间的算法(数据量大的时候就太恐怖了)

数据多到内存装不下怎么办?

(假设内存有100M容量)比如1G的数据,分10份,每份100M。先用快排让每一份各自排好序,然后写到文件中。这10份100M的 文件这个时候已经有序了。这10份每份取9M,一共90M,使得他们合并。合并后的结果放到10M的缓存区中,满了就clear,IO到 文件中。

一百、一万、一亿选取什么算法最好?

100可以基数、桶,这些很占内存,而且有一些限制条件,但是很快!

10000可以快排

一亿只能快排(因为热cache,所以比堆排序好)+归并(数据太大装不下)

大部分数据有序的情况下,用什么 算法比较好?

插入+二分。

从大量数据中取出前100个

第一反应是开始做题吗?no,大量数据,内存肯定是装不下的。那我们就假设所有数据被分成了N份吧。

先看第一份,排序前100个,然后后面的数都插入+二分去修改前100个数。

一份读完,就clear后面的数, 加载新的文件进来。

这样一次遍历就解决了。

https://blog.csdn.net/ztkhhhhhd/article/details/53138631

https://blog.csdn.net/zhushuai1221/article/details/51781002

这两篇待学习

堆排序和快速排序的比较堆排序是接近nlgn的下界,而快排有性能坏的情况,为何还是快排表现更优秀呢?1.堆排序是处理数组中相隔较远的数据,快速排序是根据两个 指针按序遍历的,根据寄存器、高速缓存的热cache、 局部性原理,快排更好2.快排的极端情况太难复现,而且可以 用随机基准数3.快排还有各种优化的方案  基数排序的性能在低数据量的时候,性能很不错;但是非... 位图法是我在编程珠玑上看到的一种比较新颖的方法,思路比较巧妙效率也很高。  使用场景举例:对2G的数据 进行排序,这是基本要求。  数据:1、每个数据不大于8亿;2、数据类型位int;3、每个数据最多重复一次。  内存:最多用200M的内存进行操作。  首先对占用的内存进行判断,每个数据不大于8亿,那么8亿是一个什么概念呢。  **1 byte = 8 bit(位)  1024 byte ... 对于内存足够大的大 数据排序,一般来说用归并排序比较好的,因为他的读取次数会比较少(在数据挖掘的理论里面,读取次数越少,排序方法越快),同时是稳定的; 但是如果内存空间不足,就自然要减少次数了,所以也可以用快速排序,快速排序是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短; 也可以利用堆排序,当N很大时,并且有...
一、快速排序(用的比较多) (1) 递归对所有数据分成[a,b)b(b,d]两个区间,(b,d]区间内的数都是大于[a,b)区间内的数 (2) 对(b,d]重复(1)操作,直到最右边的区间个数小于1000个。注意[a,b)区间不用划分 (3) 返回上一个区间,并返回此区间的数字数目。接着方法仍然是对上一区间的左边进行划分,分为[a2,b2)b2(b2,d2]两个区间,取(b2,d2]区间。如果...
一个100G的文件,内存只有4G,对其进行全排序,如何用普通的java程序编写处理 我们一般说的 排序算法 是内部排序,指的是可以将所有数据一次性的载入内存当中,然后进行排序。但是,当要排序的数据 相当大的时候,无法将全部的数据加载到内存中,这时就需要采用外部排序的方法,采用分而治之的思想,将大的数据文件切分为小的,内存可以一次加载完成的数据块,对每个数据块进行排序,然后用归并排序将各个数据块进行排序。形成最终的排好序的数据文件。 1TB数据使用32GB内存如何排序   ①、把磁盘上的1TB数据分割为40块(c
数据 很大的排序问题 大 数据如何排序     【尊重原创,转载请注明出处】http://blog.csdn.net/guyuealian/article/details/51119499     同学某天参加腾讯面试,技术面的时候,面试官问了排序问题: 问题一:若有1T的数据,需要实现由大到小排序,你用什么办法,说说你的思路和想法? 问题二:有10个G的数据,如果
大数据 研究的路上,我们总要对一些很大的数据进行各种各样的操作。比如说对数据排序,比如说对数据统计,比如说对数据计算。而在大 的数据面前,我们总是束手无策,因为我们无法在限定时间的情况下,在效率上做到让人满意,也无法在限定空间的情况下,能够快速解决问题。可能我们在一些日常的开发过程中,没有遇到过这些问题。不过,现在是时候来考虑一下这样的问题了。因为,现在正值 大数据 的时代。 分而治之/hash映射 + hash统计 + 堆/快速/归并排序; Bloom filter/Bitmap;Trie树/数据库/倒排索引;外排序;分布式处理之hadoop/mapreduce。