| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1232 人关注过本帖
标题:各位高手能帮下我吗,关于基数排序的问题
只看楼主 加入收藏
yanghunter
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2005-6-18
收藏
 问题点数:0 回复次数:1 
各位高手能帮下我吗,关于基数排序的问题

什么是基数排序啊,用C语言怎样实现

我这里有道程序题,是关于航班信息的查询与检索的

要求对飞机航班信息进行排序和查找。可按航班的航班号、起始站、到达站、起飞时间以及到达时间等信息进行查找。

这个设计要采用基数排序法对一组具有结构特点的飞机航标号进行排序,利用折半查找法对排好序的航班记录按航班号实现快速查找,按其他关键字的查找可采用最简单的顺序查找方法进行。

每个航班记录包括8项,分别是:航班号,起始点,终点站,班期,起飞时间,到达时间,飞机型和票价等。其中航班号一项的格式为:

K0 K1 K2 K3 K4 K5

比如 C A 3 8 6 9

其中K0和K1的输入值是航班公司的别称,用两个大写字母表示,后4位为航班编号

其它的不难,就是关于怎么用基数排序法对航班号进行排序弄不懂,各位能帮一下忙吗,用C语言做这个程序给我学习一下,谢谢 我的邮箱是yanghanhui@126.com

搜索更多相关主题的帖子: 基数排序 航班信息 终点站 C语言 
2005-06-18 23:45
seeker
Rank: 1
等 级:新手上路
帖 子:172
专家分:0
注 册:2005-6-5
收藏
得分:0 
没有学过数据结构的话,告诉你你也不懂,我给出基数排列中的算法给你,自己看吧,

void Distribute(SLList &L, int i, ArrType &f, ArrType &e) {  
  // 算法10.15
  // 静态链表L的r域中记录已按(keys[0],...,keys[i-1])有序,
  // 本算法按第i个关键字keys[i]建立RADIX个子表,
  // 使同一子表中记录的keys[i]相同。f[0..RADIX-1]和e[0..RADIX-1]
  // 分别指向各子表中第一个和最后一个记录。
  int j, p;
  for (j=0; j<RADIX; ++j) f[j] = 0;     // 各子表初始化为空表
  for (p=L.r[0].next;  p;  p=L.r[p].next) {
    j = L.r[p].keys[i]-'0';  // 将记录中第i个关键字映射到[0..RADIX-1],
    if (!f[j]) f[j] = p;
    else L.r[e[j]].next = p;
    e[j] = p;                // 将p所指的结点插入第j个子表中
  }
} // Distribute

void Collect(SLList &L, int i, ArrType f, ArrType e) {  // 算法10.16
  // 本算法按keys[i]自小至大地将f[0..RADIX-1]所指各子表依次链接成
  // 一个链表,e[0..RADIX-1]为各子表的尾指针
  int j,t;
  for (j=0; !f[j]; j++);  // 找第一个非空子表,succ为求后继函数: ++
  L.r[0].next = f[j];  // L.r[0].next指向第一个非空子表中第一个结点
  t = e[j];
  while (j<RADIX) {
    for (j=j+1; j<RADIX && !f[j]; j++);       // 找下一个非空子表
    if (j<RADIX) // 链接两个非空子表
      { L.r[t].next = f[j];  t = e[j]; }
  }
  L.r[t].next = 0;   // t指向最后一个非空子表中的最后一个结点
} // Collect

void RadixSort(SLList &L) {  // 算法10.17
   // L是采用静态链表表示的顺序表。
   // 对L作基数排序,使得L成为按关键字自小到大的有序静态链表,
   // L.r[0]为头结点。
   int i;
   ArrType f, e;
   for (i=1; i<L.recnum; ++i) L.r[i-1].next = i;
   L.r[L.recnum].next = 0;     // 将L改造为静态链表
   for (i=0; i<L.keynum; ++i) {  
      // 按最低位优先依次对各关键字进行分配和收集
      Distribute(L, i, f, e);    // 第i趟分配
      Collect(L, i, f, e);       // 第i趟收集
      print_SLList2(L, i);
   }
} // RadixSort

我相信总有一片天空属于我!http://myseeker. E-Mail:lwqcny@
2005-06-20 21:30
快速回复:各位高手能帮下我吗,关于基数排序的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016229 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved