数据结构 多关键字排序

阅读: 评论:0

数据结构 多关键字排序

数据结构 多关键字排序

实验7 多关键字排序

一、实验目的 

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

二、实验原理

依次根据某位进行排序,排好序后更新a[i],最后得到的就是根据每位排好序的a[i]

    LSDSort()函数:cnt数组用来存放某位的个数,tmp数组存放a[i]数据,根据cnt[ ] 中的数据得到tmp中存放哪一个a[i]

三、参考程序

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

#define RADIX 101 //基数,分数有 101 种可能 
#define K 3 //关键字,有 3 个关键字 

struct tagMark
{
int key[K]; //有 K 个关键字 
}a[8] = {{1,2,3}, {0,2,3}, {5,4,6}, {6,2,6}, {4,4,1}, {0,1,4},
{60,30,6}, {60,20,6}};

/*a:待排序的数组地址 
size:元素数量 
radix:基数 
k:关键字数量 
*/

void LSDSort(struct tagMark *a, int size, int radix, int k)
{
int *cnt = (int *)malloc(sizeof(int) * radix), i;
struct tagMark *tmp = (struct tagMark *)malloc(sizeof(struct tagMark) * size); //待排序的记录的数量 
while (k--)
{

//初始化cnt[i]
for (i = radix-1; i >= 0; --i)
cnt[i] = 0;

 

//计数
for (i = size; i > 0; )
++cnt[a[--i].key[k]];

//累加cnt
for (i = 0; i < radix; ++i)
cnt[i + 1] += cnt[i];

//按顺序把a[i]放入tmp中
for (i = size; i > 0; )
{
--i;
tmp[--cnt[a[i].key[k]]] = a[i];
}

//把a[i]按照某一位排好的序,重新排序
for (i = size; i > 0; )
{
--i;
a[i] = tmp[i];
}
}
free(cnt);
free(tmp);
}

int main()
{
int i, j;
LSDSort(a, 8, RADIX, K); //对 8 个记录进行排序

//输出 
for (i = 0; i < 8; ++i, putchar('n'))
for (j = 0; j < K; ++j)
printf("%d ", a[i].key[j]);
return 0;
}

 

 

 

本文发布于:2024-02-04 11:59:11,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170706677555361.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据结构   关键字
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23