[图解] 桶排序

2019-04-24  本文已影响0人  CoderJed

桶排序是一种排序的思想,其实现包括计数排序基数排序两种,冒泡排序选择排序插入排序归并排序快速排序堆排序都是基于比较的排序,而桶排序提出了一种新的思路,即基于数据状态的排序。

1. 桶排序的思想

(1) 得到无序数组的取值范围


(2) 根据取值范围"创建"对应数量的"桶"

(3) 遍历数组,把每个元素放到对应的"桶"中

(4) 按照顺序遍历桶中的每个元素,依次放到数组中,即可完成数组的排序。

"桶"是一种容器,这个容器可以用多种数据结构实现,包括数组、队列或者栈。

2. 复杂度

3. 桶排序的实现之计数排序

(1) 计数排序图示过程

  1. 找出无序数组的最大值,创建一个长度为最大值+1的空数组
  1. 遍历原数组,统计每个元素出现的次数
  1. 遍历"桶",即用于元素个数统计的数组,得到有序的数组

(2) 计数排序Java代码实现

public static void bucketSort(int[] arr) {
    
    if (arr == null || arr.length < 2) {
        return;
    }
    
    int max = Integer.MIN_VALUE;
    
    for (int i = 0; i < arr.length; i++) {
        max = Math.max(max, arr[i]);
    }
    
    int[] bucket = new int[max + 1];
    
    for (int i = 0; i < arr.length; i++) {
        bucket[arr[i]]++;
    }
    
    int i = 0;
    
    for (int j = 0; j < bucket.length; j++) {
        while (bucket[j]-- > 0) {
            arr[i++] = j;
        }
    }
}

4. 桶排序的实现之基数排序(待更新)

(1) 基数排序图示过程

(2) 基数排序Java代码实现


上一篇 下一篇

猜你喜欢

热点阅读