首页 > 代码库 > 位图排序
位图排序
基于比较的排序时间复杂度至少为O(nlgn),在时间上堆排序和快速排序基本上都达到了比较排序的极限,如果要获取更快的排序速度,就需要找不是基于比较的排序方法,位图排序就是其中的一个。
位图排序是效率最高的排序算法,其时间复杂度是O(n),空间复杂度也非常小,但是要求输入的数据不能重复,而且要知道数据的范围。
位图排序的思想比较简单,用计算机的每一位表示一个数,一个int类型的变量就能表示32个数。比如说集合{1,2,5,7}能用二进制串01010110表示,因为这个串中的第1,2,5,7位为1(低位在右端),其他位为0。
利用这种思想我们把一个数组看成一个二进制串,每输入一个数将其所对应的位置1,输出时依次判断每一位,如果是1,就输出对应的数据。位图排序的关键子程序是置位程序和测试程序,分别对应输入和输出。
下边是位图排序的java实现:
package lamoop; public class BitSort { static int WORDLENGTH = 32; static int SHIFT = 5; static int MASK = 0x1F; static int MAX = 10000000; static int[] A = new int[(1 + MAX / WORDLENGTH)]; public static void main(String[] args) { int[] data = http://www.mamicode.com/{568746,12354,45798,1245,8,17,1,5};>
在java中还可以使用bitset很容易的实现位图排序:
package lamoop; import java.util.BitSet; public class BitSort { static int MAX = 10000000; public static void main(String[] args) { int[] data = http://www.mamicode.com/{ 5746, 14, 498, 125, 8, 17, 1, 5 };>
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。