基数排序之多keyword排序运用队列
源码例如以下: #include <stdlib.h>
#include <stdio.h> typedef struct QUEUEnode* link;
struct QUEUEnode{
int item ;
link next;
link head , tail;
}; link NEW(int item, link next){
link x = (link) malloc(sizeof *x);
x->item = item;
x->next = next;
return x;
} void QUEUEinit(link queue, int maxN){
queue->head = NULL;
} int QUEUEempty(link queue){
return queue->head == NULL;
} void QUEUEput(link queue,int item){
if(queue->head == NULL){
queue->head =(queue->tail = NEW(item,queue->head)) ;
return;
}
queue->tail->next = NEW(item,queue->tail->next);
queue->tail = queue->tail->next;
} int QUEUEget(link queue){
int item = queue->head->item;
link t = queue->head->next;
free(queue->head);
queue->head = t;
return item;
}
//以上是QUEUE的ADT
//求整数k的第p位
int radix(int k, int p){
int i,power = 1 ;
for(i=1;i<=p-1;i++) power*=10;
return (k%(power*10))/power;
} void p(link A){
while(!QUEUEempty(A))
printf("%d ",QUEUEget(A));
}
void radixSort(int figure, link A){ //figure:待排序的数据最大位数 此方法仅仅适合数字排序
link Q[10]; int data, pass, i , r;
for(pass=1;pass<=figure;pass++){
for(i=0;i<=9;i++){
Q[i] = (link)malloc(sizeof *(Q[i]));
QUEUEinit(Q[i],40); //置空队列
}
while(!QUEUEempty(A)){
data = QUEUEget(A);
r = radix(data,pass);
QUEUEput(Q[r],data); //分别往十个队列里分发数据
}
for(i=0;i<=9;i++) //这里的操作还能够再优化
while(!QUEUEempty(Q[i]))
QUEUEput(A,QUEUEget(Q[i])); //最后往目标队列回收各数位排好序的数据
}
}
main(){
int a[10] = {321,234,666,745,245,12,23,1,555,651};
link A = (link)malloc(sizeof*A);
QUEUEinit(A,10);
int i;
for(i=0;i<10;i++)QUEUEput(A,a[i]);
radixSort(3,A);
p(A);
}
基数排序之多keyword排序运用队列的更多相关文章
- C#实现一个万物皆可排序的队列
需求 产品中需要向不同的客户推送数据,原来的实现是每条数据产生后就立即向客户推送数据,走的的是HTTP协议.因为每条数据都比较小,而数据生成的频次也比较高,这就会频繁的建立HTTP连接,而且每次HTT ...
- hdu1500 (排序+单调队列优化 )
从n根筷子里面, 选择k+8个集合的筷子,每个集合三根筷子, A<=B<=C, 费用是(A-B)^2, 问最小的费用是多少. 将n根筷子排序之后,可以知道A和B的下标一定是连续的. 比如有 ...
- UVA 10305 Ordering Tasks(拓扑排序的队列解法)
题目链接: https://vjudge.net/problem/UVA-10305#author=goodlife2017 题目描述 John有n个任务,但是有些任务需要在做完另外一些任务后才能做. ...
- 使用deque模块固定队列长度,用headq模块来查找最大或最小的N个元素以及实现一个优先级排序的队列
一. deque(双端队列) 1. 使用 deque(maxlen=N)会新建一个固定大小的队列.当新的元素加入并且这个队列已满的时候,最老的元素会自动被移除掉 >>> from c ...
- [JZOJ 5905] [NOIP2018模拟10.15] 黑暗之魂(darksoul) 解题报告 (拓扑排序+单调队列+无向图基环树)
题目链接: http://172.16.0.132/senior/#main/show/5905 题目: oi_juruo热爱一款名叫黑暗之魂的游戏.在这个游戏中玩家要操纵一名有 点生命值的无火的余灰 ...
- keyword排序-Es问题
问题:mapping索引registerordercount字段设置为keyword,但是在进行倒序排的视乎发现,没有按预期排序. keyword类型: "registerordercoun ...
- java-集合排序,队列,散列表map以及如何遍历
1.1集合排序 可以通过集合的工具类java.util.Collections的静态方法sort需要注意的时,只能对List排序,因为它有序. Collections.sort(list); 排序字符 ...
- iOS - 排序的队列中插入数值
http://stackoverflow.com/questions/8180115/nsmutablearray-add-object-with-order 用Selector http://sta ...
- 内部排序->基数排序->链式基数排序
文字描述 基数排序是和前面各类排序方法完全不相同,前面几篇文章介绍的排序算法的实现主要是通过关键字间的比较和移动记录这两种操作,而实现基数排序不需要进行记录关键字间的比较.基数排序是一种借助多关键字排 ...
随机推荐
- 题解报告:hdu 2516 取石子游戏(斐波那契博弈)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2516 Problem Description 1堆石子有n个,两人轮流取.先取者第1次可以取任意多个, ...
- 正则表达式 \D 元字符
\D元字符可以匹配非数字字符,等价于"[^0-9]". 语法结构: (1).构造函数方式: new RegExp("\\D") (2).对象直接量方式: /\D ...
- android中textview单行显示,多余的省略
<TextView android:id="@+id/music_title" android:layout_width="wrap_content" a ...
- Android基础TOP3_1:纵横屏切换
在Res下建立layout-port文件夹 为竖屏时加载的界面: 建立layout-land 文件夹 为横屏加载的界面
- JS高级——逻辑中断
1.表达式1||表达式2:表达式1为真,返回表达式1:表达式1为假,返回表达式2 2.表达式1&&表达2:表达式1为真,返回表达式2:表达式1为假,返回表达式1
- 【译】x86程序员手册18-6.3.1描述符保存保护参数
6.3 Segment-Level Protection 段级保护 All five aspects of protection apply to segment translation: 段转换时会 ...
- 回顾Google IO 2016 -Keynote【图解】
Google IO大会倒计时进行中~~ 两名演奏者在使用高空“古筝”. 最后5秒倒计时~~~~全场轰动~ 倒计时结束,IO大会正式开始.屏幕中,一个人把纯白的唱片放入唱片机中. 然后欢快的音乐响起,台 ...
- sratookit
sratookit 下载后解压 tar -zxvf sratoolkit.2.8.2-1-ubuntu64.tar.gz 移动到专门安装生物信息软件的目录下 mv sratoolkit.2.8.2-1 ...
- VUE路由history模式坑记--NGINX
因微信分享和自动登录需要,对于URL中存在'#'的地址,处理起来比较坑(需要手动写一些代码来处理).还有可能会有一些隐藏的问题没被发现. 如果VUE能像其他(JSP/PHP)系统的路径一样,就不存在这 ...
- CAD创建一个新的图形文件
static void linea(void) { AcDbDatabase *pDb = new AcDbDatabase(true, false); AcGePoint3d pickPoint; ...