排序之计数排序

#include< stdio.h>
#include< stdlib.h>
void countsort(int *array,int *temp,int length,int max)
{
int *temp1 = (int *)malloc(sizeof(int)*(max+1));
int i,j;
for(i=0;i<= max;i++)
{
temp1[i]=0;
}
for(j=0;j< length;j++)
{
temp1[array[j]] = temp1[array[j]]+1;
}
for(i=1;i<= max;i++)
{
temp1[i]=temp1[i]+temp1[i-1];
}
for(j=length-1;j >= 0;j--)
{
temp[temp1[array[j]]-1] = array[j];//下标从0开始的,所以temp[temp1[array[j]]-1]
temp1[array[j]]=temp1[array[j]]-1;
}
free(temp1);
}

int arraymax(int *array,int max)
{
int i;
int temp=array[0];
for(i=1;i < max;i++)
{
if(array[i] > temp)
temp=array[i];
}
return temp;
}


int main()
{


int i;
int array[]={5,2,3,4,5,6,7,1,9};

int length=sizeof(array)/sizeof(array[0]);
int *temp = (int *)malloc(sizeof(int)*(length+1));
printf("处理之前:\n");
for(i=0;i < length;i++)
{
printf("%d",array[i]);
}
printf("\n排序之后\n");
int max = arraymax(array,length);

countsort(array,temp,length,max);
for(i=0;i < length;i++)
{
printf("%d",temp[i]);
}
free(temp);
return 0;
}

posted @ 2014-04-01 20:08  dreamsyeah  阅读(115)  评论(0编辑  收藏  举报