基数排序之多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 ...
- 内部排序->基数排序->链式基数排序
文字描述 基数排序是和前面各类排序方法完全不相同,前面几篇文章介绍的排序算法的实现主要是通过关键字间的比较和移动记录这两种操作,而实现基数排序不需要进行记录关键字间的比较.基数排序是一种借助多关键字排 ...
随机推荐
- c# regex Match Matches MatchCollection 用法
string text = "1A 2B 3C 4D 5E 6F 7G 8H 9I 10J 11Q 12J 13K 14L 15M 16N ffee80 #800080"; Reg ...
- Mac使用bootcamp安装win8.1出现网卡驱动没有安装问题
问题:没有网络连接 原因:在bootcamp烧的u盘里面其实附带了驱动,只是没有自动安装 解决:D:\BootCamp\Drivers\Broadcom\BroadcomWirelessWin8x64 ...
- Hadoop Hive概念学习系列之hive与依赖环境的交互(二十一)
hive与环境的交互,算是一个小知识点,但掌握不菲! 如何在hive里,也达到这样呢? 不需要这样啦,因为,hive是建立在hadoop之上,启动hive,相当于,就是,hadoop jar ** h ...
- reactnative(1) - RefreshControl 使用案例
'use strict'; import React, { Component } from 'react'; import { AppRegistry, ScrollView, StyleSheet ...
- [ BZOJ 2134 ] 单选错位
\(\\\) \(Description\) 一共\(N\)道题目,第\(i\)道题有\(A_i\)个选项,现在有一个人做完了所有题目,但将每一道题的答案都写到了下一道题的位置\((\)第\( ...
- html5——网络状态
我们可以通过window.onLine来检测,用户当前的网络状况,返回一个布尔值 window.addEventListener("online",function(){ aler ...
- 使用FastReport的BarCode2D控件生成含中文的PDF417条形码
解决方法:设定CodePage为936 FastReport用户手册中关于CodePage的说明: CodePage This property is specific to the PDF417 a ...
- ESX/ESXi 主机的某些存储阵列可能存在读取或写入性能问题 (1002598)
Last Updated: 12/14/2018Categories: Troubleshooting Details 免责声明:本文为 ESX/ESXi hosts might experienc ...
- SQL一对多取子表最新记录的所有字段(ROW_NUMBER()OVER()函数的应用)
ROW_NUMBER()OVER() 参数1:分组字段 PARTITION BY ..,..,.... 可选 参数2:排序字段 ORDER BY .. DESC 必须 实例: 根据Confir ...
- redis数据库学习笔记
redis数据库 工作需要,简单了解一下redis数据库,供后续参考和复习使用. 一.简介 Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理.它支持字 ...