#include<stdio.h>
#include<stdlib.h>
#include<math.h>
//基数排序
#define N 10
int t[N],f[N];
void prin(int t2[],int n)
{
int i;
for(i=0; i<n; i++)
{
printf("%5d",t2[i]);
}
printf("\n");
}
void esd(int t[],int n,int min,int max)
{
int i;
for(i=0; i<N; i++)
{
t[i]=rand()%(max+1-min)+min;
}
}
int Ysort(int t[],int n)
{
int j;
for(j=0; j<N-1; j++)
{
if(t[j]>t[j+1])
{
return 0;
}
}
return 1;
}
int quwei(int n,int wei)
{
int i,j,weishu,tem=1;
for(i=0; i<wei; i++)
{
weishu=(n/tem)%10;
tem=10*tem;
}
return weishu;
}
void oxsort(int t[],int n)
{
int i,j,k,flg,count=0,tem,wei=0,max=t[0];
for(i=0; i<n; i++)
{
if(max<t[i])
max=t[i];
}
while(max)
{
max=max/10;
wei++;
}
for(k=0; k<wei; k++)
{
for(i=0; i<n; i++)
{
f[i]=quwei(t[i],k+1);
}
if(k!=0)
{
printf("上次排序: ");
prin(t,n);
}
printf("取第%d位: ",k+1);
prin(f,n);
for(i=0; i<n-1; i++)
{
flg=1;
for(j=0; j<n-i-1; j++)
{
if(f[j]>f[j+1])
{
tem=f[j];
f[j]=f[j+1];
f[j+1]=tem;
tem=t[j];
t[j]=t[j+1];
t[j+1]=tem;
flg=0;
}
}
if(flg)
{
break;
}
}
printf("取位排序: ");
prin(f,n);
printf("第%d次排序:",k+1);
prin(t,n);
printf("\n");
}
}
int main()
{
int n=N,max,min;
min=0;
max=1500;
printf("size:%d\n",n);
printf("min:%d max:%d\n",min,max);
esd(t,n,min,max);
printf("原数组: ");
prin(t,n);
int b,e;
b=clock();
oxsort(t,n);
e=clock();
printf("running time:%dms\n",(e-b));
if(Ysort(t,n))
{
printf("sort:yes\n");
}
else
{
printf("sort:no\n");
}
//prin(t,n);
return 0;
}
【基数排序】排序原理及过程展示版
最新推荐文章于 2024-08-16 17:15:42 发布