计数排序

在排序的最终结果中,各元素的次序依赖于他们之间的比较这类算法称为比较排序。如归并排序、冒泡排序、堆排序等等。

而还有一种排序算法不是用比较来实现的,如计数排序

实现

#include <stdio.h>
#include <malloc.h>
void CountingSort(int *In, int *Out,int len)
{
    int i;
    int max=-1000;
    int * temp;
    for(i=0;i<len;i++){
        if(In[i]>max)
            max=In[i];
    }
    temp=(int*)malloc(sizeof(int)*max);
    for(i=0;i<=max;i++)
        temp[i]=0;
    
    for(i=0;i<len;i++){
        temp[In[i]]=temp[In[i]]+1;
    }
 
    for(i=1;i<=max;i++){
        temp[i]=temp[i]+temp[i-1];
    }

    for(i=len-1;i>=0;i--){
        Out[temp[In[i]]-1]=In[i];
        temp[In[i]]=temp[In[i]]-1;
    }
}
 
void main()
{
    int Arry[]={2,5,3,0,2,3,0,3};
    int len=sizeof(Arry)/sizeof(int);
    int SortedArry[len];
    printf("Len %d\n",len);
    int i;
    printf("After Sorting\n");
    CountingSort(Arry,SortedArry,len);
    for(i=0;i<len;i++)
        printf("%d ",SortedArry[i]);
}


在线编译器

电脑不方便,可以用在线编译器http://codepad.org编译,但问题是出了segment  faultz之类的错误无法找出。

你可能感兴趣的:(计数排序)