1 Thuật toán sắp xếp bẳng Radix sort Thu Aug 18, 2011 9:18 pm
El Kun
Super Moderator
Thuật toán sắp xếp bẳng Radix sort
- Code:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
////Radix sort
int getMax(int a[],int n)
{
int max=a[0];
for(int i=1;i<n;i++)
if(max<a[i])
max=a[i];
return max;
}
int countDigit(int n)
{
int count=0;
while(n)
{
count++;
n/=10;
}
return count;
}
int getDigit(int n,int t)
{
int tt=1;
for(int i=0;i<t;i++)tt*=10;
return ((n/tt)%10);
}
void send2Box(int a[],int n,int *b[10],int num[10],int t)
{
for(int i=0;i<n;i++)
{
int tt=getDigit(a[i],t);
b[tt][num[tt]++]=a[i];
}
}
void getValue(int a[],int *b[10],int nn[10])
{
int j=0;
for(int i=0;i<10;i++)
{
if(nn[i]!=0)
{
for(int k=0;
k<nn[i];
k++)a[j++]=b[i][k];
nn[i]=0;
}
}
}
void radixsort(int a[],int n)
{
int *Box[10];
int number[10];
for(int i=0;i<10;i++)
{
Box[i]=new int [n];
if(Box[i]==NULL)
{
printf("Not enough");
exit(0);
}
number[i]=0;
}
int nn=countDigit(getMax(a,n));
for(int i=0;i<nn;i++)
{
send2Box(a,n,Box,number,i);
getValue(a,Box,number);
}
}
void xuat(int a[], int n)
{
int i=0;
printf("\n\t");
for (i=0;i<n;i++)
{
printf("%-6d",a[i]) ;
if ((i+1) % 10 == 0)
printf("\n\t");
}
}
void main()
{
clrscr();
int i,n,A[100];
do
{
printf("\n\tNhap so phan tu mang\n\t( n>0 va n<=100) : ");
scanf("%d",&n);
}while (n<0||n>100);
for (i=0;i<n;i++)
{
printf("Nhap A[%d]=",i);
scanf("%d",&A[i]);
}
printf("\n\tMang moi nhap vao:\n");
xuat(A,n);
printf("\n\n\tMang da sap xep :\n");
radixsort(A,n);
xuat(A,n);
getch();
}