喵星软件园提供热门手机游戏下载,最新手机游戏攻略!

移动排序好玩吗 移动排序玩法简介,

时间:2023-10-08 09:40:45 来源: 浏览:

桶排序的简单理解

详细描述

桶排序的工作原理是,将序列中的元素分配到有限的桶里,每个桶再分别进行排序(使用别的排序算法或者递归使用桶排序),最终合并成结果序列。

桶排序详细的执行步骤如下:

  1. 找出序列中最小的元素和最大的元素,并计算得到差值范围和映射范围,确定桶的数量;
  2. 遍历整个序列,将每一个元素移动到对应的桶中;
  3. 对每一个桶中的元素进行排序,直到所有的桶中元素都有序;
  4. 合并每一个桶中的元素成为有序序列。

算法图解


问题解疑

桶排序的关键是什么?

桶排序过程中存在两个关键环节:元素到桶的映射规则、排序算法选择。

对于映射规则,如果规则设计过于模糊、宽泛,可能所有元素都映射到同一个桶,导致桶排序往比较类排序算法演变;如果规则设计过于严苛,可能每一个桶只分配到一个元素,导致桶排序往计数排序方式演变。

对于桶中元素的排序,可以继续使用桶排序或者其他排序算法,最终桶排序的复杂度和稳定性,都根据排序算法的选择有所不同。

桶排序的适用于什么场景?

最好时间复杂度的场景是:序列中的元素值范围越小越好,比如对范围只有 10 的序列做排序,申请 10 个桶就能实现遍历一次序列完成排序。

最好空间复杂度的场景是:序列中的元素值均匀分布,最终分配到每一个桶的元素数量都相差不大,这样可以避免数据倾斜的问题。

代码实现

package cn.fatedeity.algorithm.sort; import java.util.ArrayList;import java.util.List; /** * 桶排序算法 */public class BucketSort {    private static void swap(List<Integer> numbers, int src, int target) {        int temp = numbers.get(src);        numbers.set(src, numbers.get(target));        numbers.set(target, temp);    }     private static void insertSort(List<Integer> numbers) {        for (int i = 1; i < numbers.size(); i++) {            for (int j = i; j > 0; j--) {                if (numbers.get(j - 1) <= numbers.get(j)) {                    break;                }                swap(numbers, j, j - 1);            }        }    }     public static int<> sort(int<> numbers) {        if (numbers.length == 0) {            return numbers;        }         int min = numbers<0>, max = numbers<0>;        for (int number : numbers) {            if (number < min) {                min = number;            } else if (number > max) {                max = number;            }        }         // 以 10 为步长        int bucketNum = (max - min) / 10 + 1;        List<List<Integer>> bucketList = new ArrayList<>();        for (int i = 0; i < bucketNum; i++) {            bucketList.add(new ArrayList<>());        }         // 将元素分配到桶中        for (int number : numbers) {            int index = (number - min) / 10;            List<Integer> bucket = bucketList.get(index);            bucket.add(number);        }         int index = 0;        for (int i = 0; i < bucketNum; i++) {            List<Integer> bucket = bucketList.get(i);            insertSort(bucket);            for (int number : bucket) {                numbers = number;            }        }        return numbers;    }}

文章来自https://www.cnblogs.com/fatedeity/p/16425568.html

标题:移动排序好玩吗 移动排序玩法简介,
链接:https://www.miaoshengapp.cn/yxgl/195678.html
版权:文章转载自网络,如有侵权,请联系删除!
资讯推荐
《林中小女巫》1.6.21版本更新了什么 1.6.21版本更新内容一览,
《林中小女巫》1.6.21版本更新了什么 1.6.21版本更新内容一览,

都给我码住|女生爱玩女巫魔法题材游戏合集本

2023-10-04
原神静寂闲雅食谱介绍,原神静寂闲雅食谱
原神静寂闲雅食谱介绍,原神静寂闲雅食谱

他的一首小诗清丽恬静,美到极致,宛如一幅意境

2023-10-07
电影式游戏手游有哪些推荐2022 人气电影游戏有哪些,
电影式游戏手游有哪些推荐2022 人气电影游戏有哪些,

看完电影《孤注一掷》,这样的“忙”你还帮吗

2023-10-06
宝可梦传说阿尔宙斯幽尾玄鱼性格选择及配招推荐,
宝可梦传说阿尔宙斯幽尾玄鱼性格选择及配招推荐,

旷野之息版宝可梦!《宝可梦传说阿尔宙斯》玩

2023-10-06
第一届“微生物 ”国际性青年人高新科技艺术展评交流会揭幕,微生物艺术大赛
第一届“微生物 ”国际性青年人高新科技艺术展评交流会揭幕,微生物艺术大赛

“大城市教科院联盟全国三次学术年会暨脑科

2023-10-06
中国香港政务司司长:一如既往适用社会发展社会各界促进和参加志愿者服务项目,
中国香港政务司司长:一如既往适用社会发展社会各界促进和参加志愿者服务项目,

李家超:深信香港所走方向正确 发展需有和平

2023-10-06