算法-最快最简单的排序—-桶排序(简单)

简述

数组大小表示分数或者数的范围 如14 55 103 66 88 范围我们可以取 0-103之间,那么数组范围就是 book[104]
输入要排序的数,然后对其数为下标的数组进行计数+1, 如66,则对book[66] 这个数进行+1
统计完数以后,遍历数组,取出有计数的数组元素,并打印该数组下标(有计数的 其值>=1,没有计数的为0

时间复杂度 and 缺点

时间复杂度:O(2*(m+n))  即 O(M+N)    [m为桶的个数,n为待排序个数]
缺点:数大占用内存越大,耗资源,只能排序单个

Java

import java.util.Scanner;
public class Ceshi {
    public static void main(String[] args) {
        //桶排序(简单) : 成绩有 5,8,6,6,7 (满分10分) 排序
        //申明桶 0-10分 11个桶 用来计数
        int[] book = new int[11];
        int k = 0;
        //循环输入分数 5个人分数
        for (int i = 1;i <= 5;i++){
            System.out.println("请输入成绩:");
            Scanner scanner = new Scanner(System.in);
            if (scanner.hasNextInt()){
                k = scanner.nextInt();
                book[k]+=1;
            }
        }
        //从小到大排序输入的成绩; 从大到小则for (int j=10;j>=0;j--)
        for (int j = 0;j <= 10;j++){
            for (int s = 1;s<=book[j];s++){
                System.out.print(j + ",");
            }
        }
    }
}

Python

# 桶排序(简单)
# 申明列表(桶)
list1 = [0] * 11
# 连续输入5次
for i in range(5):
    nub = int(input("输入成绩:\n"))
    list1[nub] += 1
# 遍历
for i in range(11):
    n = 1
    while list1[i] >= n:
        print(i, end="")
        n += 1
# 当然Python中可以将元素添加到列表,使用列表的排序即可得到 reverse=False升序 True降序
list2 = [5, 6, 1, 10, 5]
list2.sort(reverse=False)
print(list2)