0
点赞
收藏
分享

微信扫一扫

计数排序,桶排序以及基数排序

zibianqu 2022-01-14 阅读 111

目录

三种排序比较概括: 

计数排序

桶排序

基数排序


三种排序比较概括: 

计数排序

public class CountSort {
    public static void countSort(int[] arr){
        //找到最大值最小值
        int max= util.util.findMax(arr);
        int min= util.util.findMin(arr);

        //数值转下标, helper的值是arr的值,建立helper[max+1-min+1]辅助数组, 记录出现的次数
        int[] helper= new int[max-min+1];
        //会有负值,正值,  计数时下标arr[i]减去再-min; 0下标不要
        for (int i = 0; i < arr.length; i++) {
            helper[arr[i]-min]++;
        }
        //下标转数值, help[]遍历覆盖原数组
        int index=0; //arr的下标
        for (int h = 0; h < helper.length; h++) {
            while (helper[h]>0 && h < helper.length){ //是while不是if!! 忘记了!!!
                arr[index]=h+min; //注意这里,加减改变了 
                index++;
                helper[h]--; //防止有重复
            }
        }

    }

    public static void main(String[] args) {
        int[] arg={-123,0,-2,54,23,5454};
        System.out.println(Arrays.toString(arg));
        countSort(arg);
        System.out.println(Arrays.toString(arg));
    }
}

桶排序

        原理动态演示:Bucket Sort Visualization

  1.  入桶: 将范围内的数据事先划分为n个"桶", 桶是有先后顺序的, 所以根据数据的大小分进相应编号的桶; 进入桶内后有一个插入排序/冒泡排序的过程, 这样桶内的数据就有序了.
  2.  出桶: 因为桶之间是有顺序有编号的,所以出桶的步骤就是按桶的顺序覆盖原数组, 这样数组就有序了

基数排序

举报

相关推荐

0 条评论