//----------------------------------------------
//
Author
:心海
//
Date
:2013-11-26
//
Blog
:http://blog.sina.com.cn/u/2116533530
//
Copyright :anyone
//
PS
:欢迎拍砖、指正。一起学习,共同进步。
//-----------------------------------------------
//堆排序问题
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
//显示函数
//d控制位数,d<9
void Display(int *A,int n,int d)
{
int i;
char ch[4];
ch[0]='%';
ch[1]=(char)(d+48+1);
ch[2]='d';
ch[3]='\0';
for(i=0;i<n;i++)
{
printf(ch,A[i]);
if((i+1)==0)
printf("\n");
}
printf("\n\n");
}
//基数排序
//A待排数组,n数组长度,d元素位数
void RadixSort(int *A,int n,int d)
{
int *p[10];
//指针数组
int a[10];
//数组
int pp,i,j,k,m,q,reminder,count;
for(pp=0;pp<d;pp++)
{
for(i=0;i<10;i++)
{
a[i] = 1;
count = (unsigned)sizeof(int) * a[i];
p[i] = (int*)malloc(count);
}
for(j=0;j<n;j++)
{
reminder = ((double)A[j])/pow(10,pp);
reminder = reminder;
//得到倒数第i位的数值
switch(reminder)
{
case 1:
a[1]+=1;
p[1] = (int*)realloc(p[1],sizeof(int)*a[1]);
p[1][a[1]-2] = A[j];
break;
case 2:
a[2]+=1;
p[2] = (int*)realloc(p[2],sizeof(int)*a[2]);
p[2][a[2]-2] = A[j];
break;
case 3:
a[3]+=1;
p[3] = (int*)realloc(p[3],sizeof(int)*a[3]);
p[3][a[3]-2] = A[j];
break;
case 4:
a[4]+=1;
p[4] = (int*)realloc(p[4],sizeof(int)*a[4]);
p[4][a[4]-2] = A[j];
break;
case 5:
a[5]+=1;
p[5] = (int*)realloc(p[5],sizeof(int)*a[5]);
p[5][a[5]-2] = A[j];
break;
case 6:
a[6]+=1;
p[6] = (int*)realloc(p[6],sizeof(int)*a[6]);
p[6][a[6]-2] = A[j];
break;
case 7:
a[7]+=1;
p[7] = (int*)realloc(p[7],sizeof(int)*a[7]);
p[7][a[7]-2] = A[j];
break;
case 8:
a[8]+=1;
p[8] = (int*)realloc(p[8],sizeof(int)*a[8]);
p[8][a[8]-2] = A[j];
break;
case 9:
a[9]+=1;
p[9] = (int*)realloc(p[9],sizeof(int)*a[9]);
p[9][a[9]-2] = A[j];
break;
default:
a[0]+=1;
p[0] = (int*)realloc(p[0],sizeof(int)*a[0]);
p[0][a[0]-2] = A[j];
}
}
for(q=0,k=0;q<10;q++)
{
for(m=0;m<
a[q]-1;m++)
A[k++] = *(p[q]+m);
}
printf("\n\t\t中间输出结果:\n");
Display(A,n,d);
}
}
int main()
{
int *A;
int n,i,d,depthMax;
printf("请输入数组长度,数据位数: ");
scanf("%d%d",&n,&d);
depthMax = (int)pow(10,d) - 1;
A = (int*)malloc((unsigned)(sizeof(int)*n));
srand((unsigned)time(NULL));
for(i=0;i<n;i++)
A[i] = rand()�pthMax;
Display(A,n,d);
RadixSort(A,n,d);
printf("\n\n\t\t最终输出结果: \n");
Display(A,n,d);
return 0;
}
//
//
//
//
//
//-----------------------------------------------
//堆排序问题
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
//显示函数
//d控制位数,d<9
void Display(int *A,int n,int d)
{
}
//基数排序
//A待排数组,n数组长度,d元素位数
void RadixSort(int *A,int n,int d)
{
}
int main()
{
}