您的位置:首页 > 编程语言 > C语言/C++

基数排序(基于C语言的实现)

2017-10-09 21:24 363 查看
基数排序(基于C语言的实现)

数组实例 9445,83,782,2

按照最末位,放在相应的桶中,得到

0    0    0    0
0    0    0    0
782    2    0    0
83    0    0    0
0    0    0    0
9445    0    0    0
0    0    0    0
0    0    0    0
0    0    0    0
0    0    0    0
782    2   83 9445


再把新得到的序列对下一位在进行相同的操作,循环4次(最大的数字只有4位)

#include <stdio.h>
#include <stdlib.h>
int max(int N[],int n)
{
int max = 0;
for(int i=0; i<n; i++)
{
if (N[i]>max)
max = N[i];
}
return max;
}
//寻找数组中最大的元素
int main()
{
int N[5]= {9445,83,782,2};
int M[5]= {9445,83,782,2};
int n=4,num = max(N,n);//n是数组大小

int temp[10]
;//创建10个桶给每个数位

for(int j=0; num!=0; j++) //循环max位数次
{
int index = 0;
for(int i=0; i<10; i++) //初始化数组
for(int j=0; j<n; j++)
temp[i][j]=0;
int cot[10]= {0}; //cot[x]表示第X号桶中写到了第几位元素
for(int i=0; i<n; i++) //遍历数组
{
temp[N[i]%10][cot[N[i]%10]] = M[i];
cot[N[i]%10]++;
N[i]/=10;
}
//        for(int i=0;i<10;i++)
//        {
//            for(int j=0;j<n;j++)
//            {
//                printf("%4d ",temp[i][j]);
//            }
//            printf("\n");
//        }
//         输出temp
//将元素恢复到数列
for(int i=0; i<10; i++)
{
for(int k=0; k<n; k++)
{
if (temp[i][k]!=0)
{
M[index] = temp[i][k];
index++;
}
}
}

for(int i=0; i<index; i++)
printf("%4d ",M[i]);
printf("\n");
for(int i=0; i<index; i++)
{
N[i] = M[i]/10;
for(int k=0; k<j; k++)
N[i]/=10;
printf("%4d ",N[i]);
}
printf("\n--------------\n");

num/=10;
}
for(int i=0; i<n; i++)
printf("%d ",M[i]);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: