• 友链

  • 首页

  • 文章归档
h u a n b l o g
h u a n b l o g

欢

HI,Friend

04月
07
数据结构

分配排序

发表于 2022-04-07 • 字数统计 1316 • 被 1,329 人看爆

基本思想

  排序过程无须比较关键字,而是通过"分配"和"收集"过程来实现排序。
  常用的分配排序有:箱排序和基数排序。

箱排序

排序思想

箱排序也称桶排序,
基本思想是:设置若干个箱子,依次扫描待排序的记录R[0],R[1],...,R[n-1],把关键字等于k的记录全都装入到第k个箱子里(分配),然后按序号依次将各非空的箱子首尾连接起来(收集)。

实例分析

假设序列为:49、38 、35、 97 、 76、 73 、 27、 49 ,将其进行桶排序

过程

分析可知,该序列数值的范围为0~100,数值总共为10个,我们定制10个桶,将它们十位相同的放一起,然后进行排序,可采用链队列的方式
桶排序实例.png

算法描述

void BucketSon(R)
{ //对R[0..n-1]做桶排序,其中0≤R[i].key<1(0≤i<n)
    for(i=0,i<n;i++) //分配过程.
        将R[i]插入到桶B[「n(R[i].key)」]中; //可插入表头上
    for(i=0;i<n;i++) //排序过程
        当B[i]非空时用插人排序将B[i]中的记录排序;
    for(i=0,i<n;i++) //收集过程
        若B[i]非空,则将B[i]中的记录依次输出到R中;
}

算法分析

箱排序的时间复杂度为O(n)。
箱排序是稳定排序,箱排序只适用于关键字取值范围较小的情况,否则所需要箱子的数目太多,会导致存储空间的浪费和计算时间的增长。

桶排序排序过程

基数排序

基数排序(Radix Sort)是对箱排序的改进和推广。

排序思想

从低位到高位依次对k^j(j=d-1,d-2,...,0)进行箱排序。在d趟箱排序中,所需的箱子数就是基数rd,这就是"基数排序"名称的由来。

实例分析

已知关键字序列{278,109,063,930,589,184,505,269,008,083},写出基数排序(升序)的排序过程。

基数排序实例分析.png

过程

分析可知:该序列最大为百位数,按照排序思想,步骤如下:
第一步:按照个位数进行排序,如上图一趟排序
第二步:按照十位数进行排序,如上图二趟排序
第三步:按照百位数进行排序,如上图三趟排序

算法分析

基数排序的时间复杂度是O(d* (rd+n))。其中rd是基数,d是关键字的位数,n是元素个数。基数排序所需的辅助存储空间为O(n+rd)。
基数排序是稳定的。

基数排序排序过程

参考

  • OnRoad_-排序算法_桶排序(箱排序
  • King逍灬遥-C++桶排序
  • 是个可爱的小伙砸-C++实现排序算法之基数排序
分享到:
内部排序方法分析比较
归并排序
  • 文章目录
  • 站点概览
欢

网红 欢

你能抓到我么?

Email RSS
看爆 Top5
  • mac系统版本与Xcode版本有冲突 4,091次看爆
  • JAVA_HOME环境配置问题 3,741次看爆
  • AssetBundle使用 3,510次看爆
  • VSCode配置C++开发环境 3,264次看爆
  • Lua反射 3,141次看爆

Copyright © 2025 欢 粤ICP备2020105803号-1

由 Halo 强力驱动 · Theme by Sagiri · 站点地图