資源簡介
包括了基數排序的實現代碼和流程圖。
先對個位數字進行統計,然后根據個位進行排序,然后對十位進行統計,然后根據十位進行排序,即可獲得最終結果。
時間效率:待排序列為n個記錄,10個關鍵碼,關鍵碼的取值范圍為0-9,則進行鏈式基數排序的時間復雜度為O(4(n+10)),其中,一趟分配時間復雜度為O(2(n+10),一趟收集時間復雜度為O(2(n+10),共進行2趟分配和收集。

代碼片段和文件信息
//基數排序的實現文件
#include?“f_radix_sort.h“
void?f_radix_sort(int?*aint?n)
{
int?ij;//定義2個循環變量
int?barrel[10]={0};//定義一個桶數組,記錄每位數字有多少
int?seat[10]={0};//定義一個位置數組,記錄該次某一個數字排序的位置
int*?b=(int*)malloc(sizeof(int)*n);//申請一塊內存,用來存儲排序之后的a
for(i=0;i {
b[i]=0;
}
for(i=0;i {
for(j=0;j<10;j++)//桶中坐標
{
if(*(a+i)%10==j)//對個位進行記錄,并放入barrel相應的位置中
{
barrel[*(a+i)%10]++;
}
}
}
for(i=1;i<10;i++)//記錄某位在排序中的位置
{
seat[i]=seat[i-1]+barrel[i-1];
}
for(i=0;i {
b[seat[(a[i]%10)]++]=a[i];
}
for(i=0;i {
a[i]=b[i];
}
for(i=0;i<10;i++)//對桶和位置進行初始化,進行下一次使用
{
barrel[i]=0;
seat[i]=0;
}
//以下為十位的排序,結果和個位類似
for(i=0;i {
for(j=0;j<10;j++)
{
if(*(a+i)/10%10==j)
{
barrel[*(a+i)/10%10]++;
}
}
}
for(i=1;i<10;i++)
{
seat[i]=seat[i-1]+barrel[i-1];
}
for(i=0;i {
b[seat[(a[i]/10%10)]++]=a[i];
}
for(i=0;i {
a[i]=b[i];
}
free(b);
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????213??2013-02-22?14:10??test.c
?????文件??????61440??2013-02-22?14:41??基數排序.doc
?????文件???????1223??2013-02-22?14:22??f_radix_sort.c
?????文件????????108??2013-02-22?09:57??f_radix_sort.h
-----------?---------??----------?-----??----
????????????????62984????????????????????4
- 上一篇:支持向量機的研究現狀與進展
- 下一篇:批量根據經緯度計算距離
評論
共有 條評論