【数据结构之排序10】基数排序

转载 2013年10月22日 11:11:07
本节介绍第二种分配排序,基数排序(Radix Sort)是对箱排序的改进和推广。

1、单关键字和多关键字

文件中任一记录R[i]的关键字均由d个分量
                      
构成。
若这d个分量中每个分量都是一个独立的关键字,则文件是多关键字的(如扑克牌有两个关键字:点数和花色);否则文件是单关键字的,
                
(0≤j<d)只不过是关键字中其中的一位(如字符串、十进制整数等)。
多关键字中的每个关键字的取值范围一般不同。如扑克牌的花色取值只有4种,而点数则有13种。单关键字中的每位一般取值范围相同。

2、基数

设单关键字的每个分量的取值范围均是:
      C0≤kj≤Crd-1(0≤j<d)
可能的取值个数rd称为基数。
     基数的选择和关键字的分解因关键宇的类型而异:
(1) 若关键字是十进制整数,则按个、十等位进行分解,基数rd=10,C0=0,C9=9,d为最长整数的位数;
(2) 若关键字是小写的英文字符串,则rd=26,Co='a',C25='z',d为字符串的最大长度。

3、基数排序的基本思想

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

4、基数排序的排序过程

     要排序的记录关键字取值范围是0到99之间的整数(36,5,16,98,95,47, 32,36,48)。对这些关键字进行基数排序的过程【参见动画演示】。

5、基数排序的类型说明和算法描述

     要保证基数排序是正确的,就必须保证除第一趟外各趟箱排序是稳定的。

6、算法分析

     若排序文件不是以数组R形式给出,而是以单链表形式给出(此时称为链式的基数排序),则可通过修改出队和人队函数使表示箱子的链队列无须分配结点空间,而使用原链表的结点空间。人队出队操作亦无需移动记录而仅需修改指针。虽然这样一来节省了一定的时间和空间,但算法要复杂得多,且时空复杂度就其数量级而言并未得到改观。
     基数排序的时间是线性的(即O(n))。
     基数排序所需的辅助存储空间为O(n+rd)。

     基数排序是稳定的。


原文地址:http://student.zjzk.cn/course_ware/data_structure/web/main.htm

相关文章推荐

一步一步复习数据结构和算法基础-LSD基数排序

#include #include typedef struct node { int data; struct node *next; }ListNode; typedef struct Arr...

数据结构基础(15) --基数排序

基数排序是一种借助“多关键字排序”的思想来实现“单关键字排序”的内部排序算法。 实现多关键字排序通常有两种作法:    最低位优先法(LSD)     先对K[0]{基数的最低位}进行排序,并按...

【数据结构】算法10.15-10.17 链式基数排序

#include #include #include#define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEAS...

数据结构实践—— 英文单词的基数排序

本文是针对[数据结构基础系列(9):排序]的实践。【项目 - 英文单词的基数排序】   设计一个基数排序的算法,将一组英文单词,按字典顺序排列。假设单词均由小写字母或空格构成,最长的单词有MaxLe...

[数据结构与算法]基数排序

编程论到极致,核心非代码,即思想。所以,真正的编程高手同时是思想独到及富有智慧(注意与聪明区别)的人。每一个算法都是一种智慧的凝聚或萃取,值得我们学习从而提高自己,开拓思路,更重要的是转换思维角度。其...

数据结构例程——基数排序

本文是[数据结构基础系列(9):排序]中第10课时[基数排序]的例程。#include #include #include #define MAXE 20 //线性表中最多元素个...

Javascript数据结构算法之队列(舞伴分配,基数排序,模拟优先就诊病人)

栈是一种先进先出(FIFO)的数据结构,数据只能在队尾插入或者在队首删除。队列用在很多地方,比如提交操作系统的一系列进程,打印任务池等,一些仿真系统用队列模拟银行或杂货店排队的顾客。 接下来...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)