算法与数据结构|C语言基数排序——顺序队列实现

基数排序
基本要求:
从键盘上输入n个程度为m的整数,要求输出这些整数的升序排列。

具体要求:

  1. 使用的数据结构是队列,利用顺序队列来实现
  2. 有良好的人机交互
  3. 能够输出每一趟分配和收集的情况
基本概念:
基数排序属于分配式排序、又称桶子法。通过键值的查询,将要排序的元素分配至某些“桶”中,以达到排序的作用。
具体思想:
以整形为例,将整形10进制按每位拆分,然后从低位到高位依次比较
主要分为两个过程:
分配,先从个位开始,根据位值(0-9)分别放到0~9号桶中
收集,再将放置在0~9号桶中的数据按顺序放到数组中
重复分配收集过程,从个位到最高位为重复次数
代码实现:

#include #include #include#define Radix 10//代表Radix(10)个队列typedef int QElemType; typedef struct { QElemType *base; //初始化的动态分配空间,存储数据 int front; //头指针,指向队列头元素,用来移动 int rear; //尾指针,指向队列尾元素的下一位置,确定长度 } SqQueue; //distribute进行第n趟分配 //原始数据保存在Q.base数组中 //ArrType是SqQueue类型的数组, void distribute(SqQueue &Q,int n,SqQueue ArrType[]) { //quot-商 //rem-存储每个数据的第n位(即第1位、第2位...第n位)的值 int i,c,temp,quot,rem; //for置空Radix(10)个队列 for(i=0; i0) { printf("队列[%d]队头指针front->",i); for(c=0; c


数据处理:
算法与数据结构|C语言基数排序——顺序队列实现
文章图片

算法与数据结构|C语言基数排序——顺序队列实现
文章图片

尾言:
基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数
【算法与数据结构|C语言基数排序——顺序队列实现】在某些时候,基数排序法的效率高于其它的稳定性排序法。

    推荐阅读