基数排序
来源:互联网 发布:北京市软件协会 编辑:程序博客网 时间:2024/06/09 16:16
基数排序是把一个逻辑关键字看成是由多个关键字组合而成的,并且一步一步地按每个关键字排号顺序,如把这些关键字记为:
例如,一个整数由若干位组成,且各位都有次序的,从而使其最右边的数字为是最低有效位,而最左边的数字位是最高有效位,比如整数的范围为0<=K<=999,那么就可以使用LSD或MSD方法进行排序,此时有三个关键字(
假设输入序列为(179,208,306,93,859,984,55,9,271,33),则技术排序如下:
代码实现:
#include<stdio.h>#define MAX_SIZE 100#define MAX_DIGIT 3#define RADX_SIZE 10typedef struct list_node *list_pointer;typedef struct list_node{ int key[MAX_DIGIT]; list_pointer link;};//基数LSD排序list_pointer radix_sort(list_pointer ptr){ list_pointer front[RADX_SIZE],rear[RADX_SIZE]; int i,j,digit; //从最低关键字进行排序 for(i=MAX_DIGIT;i>=0;i--) { for(j=0;j<RADX_SIZE;j++) front[j]=rear[j]=NULL; while(ptr) { //获取值作为箱子的索引 digit=ptr->key[i]; //是否第一个元素 if(!front[digit]) front[digit]=ptr; else rear[digit]->link=ptr; rear[digit]=ptr; ptr=ptr->link; } ptr=NULL; //寻找第一个元素不为空的最小箱子索引,为下一个关键字排序做准备 for(j=RADX_SIZE-1;j>=0;j--) { if(front[j]) { rear[j]->link=ptr;ptr=front[j]; } } } return ptr;}
函数radix_sort对记录进行MAX_DIGIT遍扫描,每遍的处理时间为O(RADX_SIXE+n),所以,总的计算时间为O(MAX_DIGIT(RADIX_SIXE+n)).
1 0
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- 基数排序
- IOS-27-iOS/OS X内存管理:基本概念与原理/内存泄露分析
- 学习Python:做数据科学还是网站开发?
- 在Linux系统下搭建Java编程操练环境
- 线程和线程池的相关问题记录
- 《项目管理艺术》第十至十六章读书摘要
- 基数排序
- android 数据存储二使用文件存储数据
- 堆(heap)和栈(stack)有什么区别?
- led 驱动程序测试
- NOIP2015TG记
- 如何提高服务器网卡的性能
- 模重复平方计算法
- IOS的空指针和野指针
- 关于ViewPager中添加各个Fragment以及设置其中的组件监听器方法