小白懂算法之桶排序
一.桶排序简介
桶排序是常见排序算法中最快的一种,大多数情况下比快排和归并排序还要快,但是也非常消耗空间,典型的以空间换时间,基本上是最耗内存的一种排序算法。
二.算法原理
桶排序是需要准备一组空桶,可以用一维数组来代替。空桶的长度是 待排序数组中最大数+1;待排序数组中元素值A放到桶数组的下标为A的位置,元素值B放到桶数组的下标为B的位置,依次类推。但考虑到一个位置上只能存放一个数,所以这个存放的数实际是记录着元素的出现个数。
三.代码实现(Java实现)
public static void main(String[] args) { //创建一个无序数组 int[] arr = new int[] {2,1,5,3,8,3,19,13,2}; //创建一组空桶,长度为arr中最大数+1 int[] bucket = new int[20]; //调用桶排序方法进行排序 BuckeSort(arr,bucket); //遍历打印 数组的结果 for(int i=0;i<arr.length;i++) { System.out.print(arr[i]+" "); } } private static void BuckeSort(int[] arr, int[] bucket) { /** * 实现思路: * 打个比方: * >arr[0] = 6 ,那bucket[6] 就+1,代表在bucket[6]有一个6了 * >如果arr[2] = 6,那bucket[6]就再+1,此时bucket[6] =2,代表存放了两个6 * >依次推理 * 遍历arr,记录元素在对应桶出现的次数 * 遍历bucket,当bucket的元素>=1,那么该元素的下标值加入到arr中 */ for(int i=0;i<arr.length;i++) { bucket[arr[i]]++; //arr[i]是作为bucket的下标值 } int t=0; //t记录arr下标 for(int j=0;j<bucket.length;j++) { //遍历桶 for(int k=1;k<=bucket[j];k++) { //若桶中元素是大于1的 arr[t++] = j; } } }