基数排序--链式基数排序(Radix)

链式基数排序:属于”分配式排序”(distribution sort)基数排序法又称“桶子法”(bucket sort)或bin sort。
链式基数排序思想:透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数。
时间效率:设待排序列为n个记录,d个关键码,关键码的取值范围为radix,则进行链式基数排序的时间复杂度为O(d(n+radix)),其中,一趟分配时间复杂度为O(n),一趟收集时间复杂度为O(n),共进行d趟分配和收集。 空间效率:需要2*radix个指向队列的辅助空间,以及用于静态链表的n个指针

/* THE BEGINNING OF RadixSort ----------------链式基数排序 */ template void InitSLList(SLList &SL) { cout<<"Creat Static List /n Input the 数据个数:/n"; cin>>SL.recnum; SL.SList=new SLCell[SL.recnum+1]; assert(SL.SList); cout<<"Input the 关键字 项数 /n"; cin>>SL.keynum; for(int i=1;i<=SL.recnum;i++) { SL.SList[i].keys=new T[SL.keynum+1]; assert(SL.SList[i].keys); } SL.SList[0].next=1; cout<<"Input 数据/n"; for(int i=1;i<=SL.recnum;i++) { cout<<"PLZ input the "<>SL.SList[i].keys[j]; } if(i!=SL.recnum) SL.SList[i].next=i+1; else SL.SList[i].next=0; } } template void RelList(SLList &SL) { for(int i=1;i<=SL.recnum;i++) delete SL.SList[i].keys; delete SL.SList; } template void Output2(SLList &SL) { for(int i=SL.SList[0].next;i;i=SL.SList[i].next) { for(int j=1;j<=SL.keynum;j++) cout< void Distrbute(SLCell *r ,int i,ArrType &f,ArrType& e) { int j; for(j=0;j void Collect(SLCell * r, int i, ArrType &f,ArrType &e) { int j; for(j=0;f[j];j++) //找第一个 非空子表 r[0].next=f[j]; //r[0].next 指向 第一个非空子表 中的第一个节点 int t=e[j]; while(j void RadixSort(SLList &SL) { for(int i=SL.keynum;i>=1;i--)//对L作基数排序,使得L按关键字自小到大有序按最低位优先(先处理个位数,然后处理十位数……)一次对个关键字进行分配和收集 // for(int i=1;i<=SL.keynum;i++) //按最低位优先 { Distrbute(SL.SList,i,f,e); Collect(SL.SList,i,f,e); Output2(SL); } } /* END OF RadixSort ----------------链式基数排序 */ 

cout<<" * 基数排序 */n" <<"0 退出基数排序/n" <<"1 链式基数排序/n"; cout<<"请选择基数排序函数:/n"; cin>>choice5; while(choice5!=5) { switch(choice5) { case 1: //链式基数排序 SLList SL; InitSLList(SL); cout<<"链式基数排序输入:/n"; Output2(SL); RadixSort(SL); cout<<"链式基数排序结果如下:/n"; Output2(SL); RelList(SL); break; } cout<<" * 基数排序 */n" <<"0 退出基数排序/n" <<"1 链式基数排序/n"; cout<<"请选择基数排序函数:/n"; cin>>choice5; } break; //end of fil3==5,链式基数排序 

以下是 最低位 优先 的结果:

 

你可能感兴趣的:(C/C++,算法相关)