15周 项目4

问题及描述:
       
/* 
烟台大学计算机与控制工程学院 
 
姓名:范宝磊
 
日期:2017.12.10 
 
文件名称:25

 
问题描述:采用归并排序、快速排序等高效算法进行排序,当数据元素较少时(如n≤64), 
经常直接使用直接插入排序算法等高复杂度的算法。这样做,会带来一定的好处, 
例如归并排序减少分配、回收临时存储区域的频次,快速排序减少递归层次等。  
 
输入:无 
 /* 
烟台大学计算机与控制工程学院 
 
姓名:范宝磊
 
日期:2017.12.10 
 
文件名称:1516
 
问题描述:设计一个基数排序的算法,将一组英文单词,按字典顺序排列。假设单词均由小写字母或空格构成,最长的单词有MaxLen个字母。 
 
输入:无 
 
 
输出:排序前后的变化 
 
 
 
 
*/  
  
#include   
#include   
#include   
#define MaxLen 9                //单词的最大长度  
#define Radix  27               //基数rd为27,分别对应' ','a',…'z'  
typedef char String[MaxLen+1];  //定义String为字符数组类型  
typedef struct node  
{  
    String word;  
    struct node *next;  
} LinkNode;  
void DispWord(String R[],int n) //输出单词  
{  
    int i;  
    printf("  ");  
    for (i=0; iword,R[i]);  
        p->next=NULL;  
        if (head[k]==NULL)  
        {  
            head[k]=p;  
            tail[k]=p;  
        }  
        else  
        {  
            tail[k]->next=p;  
            tail[k]=p;  
        }  
    }  
}  
void Collect(String R[],LinkNode *head[])  
//依次将各非空队列中的记录收集起来  
{  
    int k=0,i;  
    LinkNode *p;  
    for (i=0; inext)  
            strcpy(R[k++],p->word);  
}  
void RadixSort(String R[],int n)    //对R[0..n-1]进行基数排序  
{  
    LinkNode *head[Radix],*tail[Radix]; //定义Radix个队列  
    int i,j;  
    for (i=MaxLen-1; i>=0; i--)             //从低位到高位做d趟箱排序  
    {  
        for (j=0; j  
#include   
#include   
#include   
#define MinLength 64        //最短分段长度  
typedef int KeyType;    //定义关键字类型  
typedef char InfoType[10];  
typedef struct          //记录类型  
{  
    KeyType key;        //关键字项  
    InfoType data;      //其他数据项,类型为InfoType  
} RecType;              //排序的记录类型定义  
  
void GetData(RecType *&R, int n)  
{  
    srand(time(0));  
    R=(RecType*)malloc(sizeof(RecType)*n);  
    for(int i=0; i=low && tmp.key

   运行结果:

    15周 项目4_第1张图片

  

学习心得:


这次练习采用归并排序、快速排序等高效算法进行排序,体会到了基数排序的魅力。

你可能感兴趣的:(15周 项目4)