十大经典排序
计数排序
计数排序的基本思想是:对于待排序的数组中每个元素,求出小于等于该元素值的元素的个数,然后根据这个个数将该元素放置到排序后的相应位置上。
稳定性 | 平均时间复杂度 | 空间复杂度 |
---|---|---|
稳定 | O(k+n) | O(k) |
#include<stdio.h>
#include<stdlib.h>
void counting_sort(int arr[],int len)
{
int min=arr[0];
int max=arr[0];
for(int i=0;i<len;++i)
{
if(min>arr[i])
min=arr[i];
if(max<arr[i])
max=arr[i];
}
int range=max-min+1;
int* p=(int *)calloc(range,sizeof(int));
for(int i=0;i<len;++i)
p[arr[i]-min]++;
int j=0;
for(int i=0;i<range;++i)
while(p[i]!=0)
{
arr[j++]=i+min;
--p[i];
}
}
void counting_print(int arr[],int len)
{
for(int i=0;i<len;++i)
printf("%d ",arr[i]);
}
int main()
{
int arr[]={4,3,2,1};
int len=4;
counting_sort(arr,len);
counting_print(arr,len);
return 0;
}