任何只使用比较的一般排序算法的最坏情况下需要运行时间Ω(NlogN),但是记住,在某些特殊情况下以线性时间进行排序仍然是可能的。一个简单的例子是桶式排序(bucket sort)。为使桶式排序能够正常工作,必须要有一些附加的信息。输入数据A1,A2,A3,…,AN必须只由小于M的正整数组成(显然还可以对其进行扩充)。如果是这种情况,那么算法很简单:使用一个大小为M的称为count的数组,它被初始化为全0。于是,count有M个单元或称桶,这些桶初始化为空。当读Ai时,count[Ai]增1。在所有的输入数据读入后,扫描数组count,打印出排序后的表。该算法用时O(M+N)。如果M为O(N),那么总量就是O(N)。桶式排序的代码如下:public class A { /** * 输入数据都小于M值,假如M默认值是10 */ public static final int M = 10; public static void main(String[] args) { int[] count = new int[M]; /** * 假设输入数据是5,4,3,9,8,6,7 */ Scanner sc = new Scanner(System.in); System.out.println("请输入小于"+M+"的整数"); while(sc.hasNextInt()){ int i = sc.nextInt(); if(i==0){ break; } System.out.println("输入的数据是: "+i); count[i] = i; } System.out.println("排序后count数组中元素:"); printCount(count); }