基数排序之多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 ...
- 内部排序->基数排序->链式基数排序
文字描述 基数排序是和前面各类排序方法完全不相同,前面几篇文章介绍的排序算法的实现主要是通过关键字间的比较和移动记录这两种操作,而实现基数排序不需要进行记录关键字间的比较.基数排序是一种借助多关键字排 ...
随机推荐
- [Luogu 1966] noip13 火柴排队
[Luogu 1966] noip13 火柴排队 Problem 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之 ...
- Java保存错误日志信息
我们平时在撸代码的时候,有时候需要将某个代码块的具体错误信息保存到数据库或文件中,以便日后方便快速的查找问题. 使用e.printStackTrace(),我们可以将信息保存在具体的变量中,然后写入数 ...
- VMware 14 Pro 永久许可证激活密钥
VMware 14 Pro 永久许可证激活密钥 FF31K-AHZD1-H8ETZ-8WWEZ-WUUVACV7T2-6WY5Q-48EWP-ZXY7X-QGUWD
- Java—break跳出语句
在开发代码时,常常会产生这样的疑惑:break跳出语句是如何应用的呢? 使用break的场景有两种:一.switch语句中.二.循环语句. 这里就不介绍switch语句,主要说一下break在循环中的 ...
- jQuery怎么去掉标签的hover效果
今天项目中遇到jquery去掉hover效果的问题,开始以为直接unbind(“hover”)就可以搞定,可是实际验证这个方法并没有作用,正确的使用方法应该是下面这样: /* 这种方法是新增的,在老的 ...
- WCF开发的流程-服务端和客户端之间的通讯(内含demo讲解)
讲解技术之前,恳请博友让我说几句废话.今天是我第一在博客园发布属于自己原创的博文(如有雷同,那是绝对不可能的事,嘿嘿).之前一直是拜读各位博友的大作,受益匪浅的我在这对博友们说声谢谢,谢谢你们的共享! ...
- Python语言之数据结构2(字典,引用)
1.字典 键值对. dict={ "key1" : "value1", "key2" : "value2" } #add ...
- C# 设定时间内自动关闭提示框
通过程序来自动关闭这个消息对话框而不是由用户点击确认按钮来关闭.然而.Net framework 没有为我们提供自动关闭MessageBox 的方法,要实现这个功能,我们需要使用Window API ...
- MyBatis入门2_增删改查+数据库字段和实体字段不一致情况
本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! 当数据库字段和实体bean中属性不一致时 之前数据库P ...
- JpGraph 画图
1:借鉴地址 PHP jpgraph安装及基本用法 http://www.php.cn/php-weizijiaocheng-400977.html JpGraph使用详解之中文乱码解决方法 http ...