数据结构课程设计----基数排序
2011-06-25 14:15
519 查看
一、基数排序的基本思想:排序过程无须比较关键字,而是通过“分配”和“收集”过程来实现排序。它们的时间复杂度可达到线性阶:O(n)。
二、最高位优先(Most Significant Digit first)法,简称MSD法:先按k1排序分组,同一组中记录,关键码k1相等,再对各组按k2排序分成子组,之后,对后面的关键码继续这样的排序分组,直到按最次位关键码kd对各子组排序后。再将各组连接起来,便得到一个有序序列。
最低位优先(Least Significant Digit first)法,简称LSD法:先从kd开始排序,再对kd-1进行排序,依次重复,直到对k1排序后便得到一个有序序列。
二、最高位优先(Most Significant Digit first)法,简称MSD法:先按k1排序分组,同一组中记录,关键码k1相等,再对各组按k2排序分成子组,之后,对后面的关键码继续这样的排序分组,直到按最次位关键码kd对各子组排序后。再将各组连接起来,便得到一个有序序列。
最低位优先(Least Significant Digit first)法,简称LSD法:先从kd开始排序,再对kd-1进行排序,依次重复,直到对k1排序后便得到一个有序序列。
]#include "stdio.h" #include "stdlib.h" int main(void) { int data[10]={73,22,93,43,55,14,28,65,39,81}; int temp[10][10]={0}; int order[10]={0}; int i,j,k,n,lsd; k=0;n=1; printf("排序前: "); for (i=0;i<10;i++) printf("%d ",data[i]); putchar('/n'); while (n<=10) { for (i=0;i<10;i++) { lsd=((data[i]/n)%10); temp[lsd][order[lsd]]=data[i]; order[lsd]++; } printf("/n重新排列: "); for (i=0;i<10;i++) { if(order[i]!=0) for (j=0;j<order[i];j++) { data[k]=temp[i][j]; printf("%d ",data[k]); k++; } order[i]=0; } n*=10; k=0; } printf("/n"); printf("/n排序后: "); for(i=0;i<10;i++) printf("%d ",data[i]); printf("/n"); system("pause"); return 0; }
相关文章推荐
- 数据结构课程设计-通讯录管理系统c++版(顺序表存储,折半查找,递增排序)
- 数据结构课程设计报告
- 数据结构课程设计---最长公共子串
- 数据结构课程设计
- 数据结构课程设计——通讯录制作
- 数据结构课程设计报告-职工信息管理系统
- 数据结构课程设计—图书信息管理系统
- 数据结构课程设计 - 通讯录管理系统
- 数据结构课程设计之姓名和日期输入
- 数据结构课程设计-学生信息管理(改)
- 数据结构课程设计图书管理系统
- 2013数据结构课程设计之便利店选址(三分法)
- 课程设计----数据结构
- 数据结构课程设计题目3
- 数据结构课程设计报告
- 数据结构课程设计:顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现
- 数据结构课程设计
- 数据结构课程设计---最长公共子串
- 数据结构课程设计,校园图结构
- 数据结构课程设计