美文网首页
2021-03-08 排序算法之桶排序

2021-03-08 排序算法之桶排序

作者: 止戈学习笔记 | 来源:发表于2021-03-08 23:58 被阅读0次

思路

网上一张比较清楚的图


image.png
  1. 创建桶。
  2. 将元素放入桶。(桶之间是有序的)
  3. 对桶内元素进行排序。

桶的划分和桶内排序都是可以改动的。
尽量使每个桶的数据均匀,桶内排序尽量高效。

实现

实现的一种算法
1.找出待排序数组中的最大值 max、最小值 min
2.我们使用 动态数组 ArrayList 作为桶,桶里放的元素也用 ArrayList 存储。桶的数量为(max- min)/arr.length+1
3.遍历数组 arr,计算每个元素 arr[i] 放的桶
4.每个桶各自排序
5.替换原数组

/**
 * @Author: vividzcs
 * @Date: 2021/3/8 11:50 下午
 */
public class BucketSort {
    public static void main(String[] args) {
        int[] arr = {6,2,9,1,2,0,0};
        bucketSort(arr);
        for (int i=0; i<arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
    }

    /**
     * 1.找出待排序数组中的最大值 max、最小值 min
     * 2.我们使用 动态数组 ArrayList 作为桶,桶里放的元素也用 ArrayList 存储。桶的数量为(max- min)/arr.length+1
     * 3.遍历数组 arr,计算每个元素 arr[i] 放的桶
     * 4.每个桶各自排序
     * 5. 替换原数据
     */
    private static void bucketSort(int[] arr) {
        int max = Integer.MIN_VALUE;
        int min = Integer.MAX_VALUE;
        for (int i=0; i<arr.length; i++) {
            max = Math.max(max, arr[i]);
            min = Math.min(min, arr[i]);
        }
        int bucketNum = (max - min) / arr.length + 1;
        List<List<Integer>> list = new ArrayList<>(bucketNum);
        for (int i=0; i<bucketNum; i++) {
            list.add(new ArrayList<>());
        }
        for (int i=0; i<arr.length; i++) {
            int num = (arr[i] - min) / (arr.length);
            list.get(num).add(arr[i]);
        }

        for (int i=0; i<bucketNum; i++) {
            Collections.sort(list.get(i));
        }

        int index = 0;
        for (int i=0; i< list.size(); i++) {
            List<Integer> bucket = list.get(i);
            for (int j=0; j<bucket.size(); j++) {
                arr[index++] = bucket.get(j);
            }
        }
    }
}

相关文章

  • 线性排序

    桶排序、计数排序、基数排序 一、线性排序算法介绍 1.线性排序算法包括桶排序、计数排序、基数排序。2.线性排序算法...

  • 浅谈排序算法

    排序算法有很多种,今天先谈谈一些简单的排序算法。包括桶排序、冒泡排序和快速排序算法。后期总结各种排序算法。 桶排序...

  • 排序算法(十一)桶排序

    排序算法(十一)桶排序   桶排序(Bucket sort)是计数排序改进版,同样属于非比较排序,该算法的基本思想...

  • 排序算法三(桶,计数,基数)

    桶排序,计数排序,基数排序算法的时间复杂度都是线性的,所以把这类排序算法叫作线性排序。 桶排序 概念:将要排序的数...

  • (转)排序算法

    排序算法点这里 数据结构与算法——计数排序、桶排序、基数排序

  • 2021-03-08 排序算法之桶排序

    思路 网上一张比较清楚的图 创建桶。 将元素放入桶。(桶之间是有序的) 对桶内元素进行排序。 桶的划分和桶内排序都...

  • noip普及组3:排序算法

    排序算法 ①冒泡排序:O() ②插入排序:O() ③选择排序:O() ④桶排序 ⑤sort排序

  • 排序算法概述

    十大排序算法:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序、希尔排序、计数排序,基数排序,桶排序 算法...

  • 十大排序算法

    算法说明 十大排序算法分别是:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序...

  • 桶排序与哈希桶排序

    一.桶排序 算法原理 桶排序 (箱排序)的原理是将待排序序列分到有限数量的桶里面,然后对每个桶再分别排序(可以使用...

网友评论

      本文标题:2021-03-08 排序算法之桶排序

      本文链接:https://www.haomeiwen.com/subject/xgxvqltx.html