简易桶排序 ——java实现

来源:互联网 发布:网络主播怎么吸引粉丝 编辑:程序博客网 时间:2024/06/18 11:00
package com.ebiz;import java.util.Scanner;public class TestClass {    /**     * 对0-1000的整数进行排序(简易桶排序,后续会完善)     * 时间复杂度O(M+N)     * @param args     */    public static void main(String[] args) {        // 初始化数组的三种方法//      int[] book2 = new int[]{1,2,3};//      int[] book3 = {1,2,3};//      int[] book1 = new int[1001];        System.out.println();        // Step1.先创建桶        int[] book = new int[1001];        // 初始化桶        for(int i = 0; i < 1000; i++){            book[i] = 0;        }        // Step2.输入要排序的个数        Scanner s = new Scanner(System.in);        String str = null;        System.out.println("请输入:");        str = s.next();        System.out.println("您输入的是:" + str);        // Step3.把输入的数值放到对应的桶下进行记录        for(int m = 0; m < Integer.parseInt(str); m++){            // 不能自动提醒输入??????????            Scanner num = new Scanner(System.in);            String key = num.next();            book[Integer.parseInt(key)] ++;        }        // Step4.倒叙打印出来        for(int n = 1000; n >= 0; n--){            for(int k = 0; k < book[n]; k++){                System.out.println("倒叙:" + n);            }        }    }}

桶排序的时间复杂度为O(M+N),工作的原理是将数组分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间(Θ(n))。但桶排序并不是 比较排序,他不受到 O(n log n) 下限的影响。

1 0