计数排序是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。
/*
============================================================================
Name : counting_sort.c
Author : braveboyny
Version :
Copyright : Your copyright notice
Description : Hello World in C, Ansi-style
============================================================================
*/
#include<stdio.h>
#define MAX_NUMBER 5 /*待排序中最大的数*/
int C[MAX_NUMBER+1];
void counting_sort(int A[],int B[],int n)
{
int i,j;
for(i=0;i<MAX_NUMBER+1;i++) /*初始化数组C*/
C[i]=0;
for(j=0;j<n;j++) /*数组C[i]记录A中数字i在A中出现的次数*/
C[A[j]]+=1;
for(i=1;i<MAX_NUMBER+1;i++)/*数组C[i]记录A中数字i和i之前数字在A中总共出现的次数*/
C[i]+=C[i-1];
for(j=n-1;j>=0;j--){
B[C[A[j]]-1]=A[j]; /*根据C中的记录将数字放到B中相应的位置*/
C[A[j]]-=1;
}
}
int main(int argc,char *argv[])
{
int A[8]={2,5,3,0,2,3,0,3};
int B[8]={0},i;
counting_sort(A,B,8);
for(i=0;i<8;i++)
printf("%d ",B[i]);
putchar('\n');
return 0;
}
//out:0 0 2 2 3 3 3 5