多关键字排序实验

一、实习目的

了解多关键字的使用范围;编写程序实现对汽车牌照的排序。

二、实验原理

了解多关键字的使用范围,并实现对牌照按多关键字排序后的快速查找。

【问题描述】

为加快速度需先对数据记录按关键字排序,在汽车数据模型中,汽车是关键字,而且是具有结构特点的一类关键字。因为汽车牌照是汉字,字母和数字混编的,例如:AD7328。这种记录集合是一个适于利用多关键字进行排序的典型例子。

【基本任务】

(1)利用链式基数排序方法实现排序。

(2)在排序的基础上,利用二分查找的思想,实现对汽车记录按关键字的查找。

三、参考程序

#include<stdio.h>
#include <stdlib.h>

struct sort{
int zi[3];
};
sort a[8]={{1,2,3},{1,6,3},{1,0,9},{7,3,1},{2,3,9},{1,4,5},{7,1,8},{2,3,8}};
void paixu(sort *a,int radix,int size,int k){
int *temp,i,number=0,number1=0,j,z;
sort *b;
z=k;
temp=(int *)malloc(radix*sizeof(int));
b=(sort *)malloc(number*sizeof(sort));
while(k--){
for(i=0;i<radix;i++){
temp[i]=0;
}
for(i=0;i<size;i++){
number=a[i].zi[k];
temp[number]=temp[number]+1;
}
printf("\n----\n");
for(i=0;i<radix-1;i++){
temp[i+1]=temp[i+1]+temp[i];
}

for(i=0;i<size;i++){
number1=a[i].zi[k];
temp[number1]=temp[number1]-1;
b[temp[number1]]=a[i];

}

for(i=0;i<size;i++){
a[i]=b[i];
}

printf("\n---------------\n");
if(k==0)
break;

}
for(i=0;i<size;i++){
for(j=0;j<z;j++)
printf("%d",a[i].zi[j]);
printf("\n");
}
free(temp);
free(b);

}
int main(){

int size=8,k=3,radix=101;

paixu(a,radix,size,k);
return 0;
}

原文地址:https://www.cnblogs.com/huifeidezhuzai/p/9278967.html

时间: 2024-11-03 17:34:40

多关键字排序实验的相关文章

多关键字排序

很欢迎来看我的博客,我还有很多知识没有学习,这是我的考核作业!以此记录我的学习历程!大家参考就好!如有错误,敬请指出!在此,先谢谢一番! 多关键字排序就是基数排序,我是用单链表实现多关键字的排序的,但最主要的方法仍是"分配","收集".单链表只是在分配与收集过程中起暂时的存储作用.不仅可以用链表,还可以用栈.队列--(都是线性的!!!(^_^)) 这是结点类模板的定义: #ifndef NODE_H #define NODE_H #define NULL 0 tem

【基础练习】结构体定义比较函数双关键字排序

题目好长显得很高大上的样子其实一点也不是这样= = 再次感谢里奥同学的友情支持,没有他我现在还在一片云里雾里. 之前看ruka上一直说:可以自定义排序,但必须自定义小于号或者是比较函数,一直苦于如何实践,今天请教了里奥同学,终于拨云见日. 这样的题有很多类似的,像是codevs 3991排序(例题代码即为此题,但我会告诉你我是用后面那个题代码改的么···)  洛谷P1104 生日 都是很简单的多关键字排序 二话不说,上代码 //operator < and sort #include<cstd

常见的五类排序算法图解和实现(多关键字排序:基数排序以及各个排序算法的总结)

基数排序思想 完全不同于以前的排序算法,可以说,基数排序也叫做多关键字排序,基数排序是一种借助“多关键字排序”的思想来实现“单关键字排序”的内部排序算法. 两种方式: 1.最高位优先,先按照最高位排成若干子序列,再对子序列按照次高位排序 2.最低位优先:不必分子序列,每次排序全体元素都参与,不比较,而是通过分配+收集的方式. 多关键字排序 例:将下表所示的学生成绩单按数学成绩的等级由高到低排序,数学成绩相同的学生再按英语成绩的高低等级排序.        第一个关键字是数学成绩,第二个关键字是英

排序技巧——双关键字排序

一个萌新的成长之路 Background 在做题过程中,我们常会遇到对双关键字排序的情况,如:当分数相等时,序号小的在前. 这时我们可以通过定义cmp函数作为sort的参数进行排序. Solution 定义一个结构体,包含我们所需的关键字.例如,这是一个包含分数,序号和姓名的结构体. struct node{ int id,score; string name; }; -实现cmp函数,这里使用了两组不同的关键字. bool cmp_score_id(node a,node b) { if(a.

Python关键字排序

一.当排序关键字多于1个时,我们使用lambda表达式来描述关键字key arr=[(1,4,3),(1,3,3),(2,1,4),(3,5,1)] arr.sort(key=lambda s:(s[0],s[1])) #两个关键字排序print(arr) # 可以看到输出结果是根据列表中元组的第一项和第二项排序[(1, 3, 3), (1, 4, 3), (2, 1, 4), (3, 5, 1)] 二.若我想让第一个关键字正序,第二个关键字倒序,该怎么办呢?arr=[(1,4,3),(1,3,

SQL 按关键字排序

SQL ORDER BY Keyword(按关键字排序) ORDER BY 关键字用于对结果集进行排序. SQL ORDER BY 关键字 ORDER BY 关键字用于按升序或降序对结果集进行排序. ORDER BY 关键字默认情况下按升序排序记录. 如果需要按降序对记录进行排序,可以使用DESC关键字. SQL ORDER BY 语法 SELECT column1, column2, ... FROM table_name ORDER BY column1, column2, ... ASC|

基本排序(四):索引指针排序、链表排序、关键字排序

1. 索引和指针排序 因为元素的数量或者数据量巨大等原因,我们不希望频繁移动要排序的元素.因此,不移动元素的排序方法是维持一个索引数组或者索引指针,而排序的目标就是重排索引数组或指针. 如: 初始化for(int i = 0; i < N; i++) a[i] = &data[i]; 使用间接比较#define less(A, B) (*A < *B) 使用下标或指针排序的主要原因是避免扰乱要排序的数据.我们可以对只读文件进行排序,或者针对一个文件的多个关键字进行排序. 另一个原因是避

c++结构体双关键字排序

1 #include<bits/stdc++.h> 2 using namespace std; 3 struct node{ 4 int l,r; 5 }num[100010]; 6 int w_comp(const node &a,const node &b){ 7 if (a.l!=b.l) return a.l>b.l;//先比较第一个关键字,从大到小排序 8 return a.r<b.r;//比较第二个关键字,从小到大排序 9 } 10 int main(

AOV拓扑排序实验总结-1

实验数据:1.实验输入数据在input.txt文件中2.对于n是指有顶点n个,数据的结束标志是一行0 0. 实验目的:获取优秀的AOV排序算法模板 数据结构安排:1.队列:负责记录入度为0且没有排序的AOV顶点2.邻接表结点:邻接表结点采用自定义的复合结构,保存顶点信息.边表头指针.3.邻接表边表:采取链表的形式存储数据4.邻接表的数据类型是相同的,只是在概念上使得结点独特的保存了当前起始顶点5.按照vertex的编号独立的使用一个数组indegree保存入度,一定程度的节省了空间 实验内容:1