@[TOC]计数排序
1.概述
计数排序:计数排序又称为鸽巢原理,是对哈希直接定制法变形应用,是一种稳定的算法,它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法,当然这是一种牺牲空间换取时间的做法,而且当O(k)>O(n*log(n))的时候其效率反而不如基于比较的排序。
2.代码
#include<stdio.h> #include<stdlib.h> #include<string.h> void CountSort(int*a,int n) { int max=a[0],min=a[0]; int i=0; for(i=0;i<n;i++) { if(a[i]<min) min=a[i]; if(a[i]>max) max=a[i]; } int range=max-min+1; int *count=(int*)malloc(sizeof(int)*range); memset(count,0,sizeof(int)*range); for(i=0;i<n;i++) { count[a[i]-min]++; } int j=0; for(i=0;i<range;i++) { while(count[i]--) { a[j++]=i+min; } } free(count); } int main() { int arr[]={10,9,8,7,6,5,4,3,2,1}; int n=10; CountSort(arr,n); for(int i=0;i<n;i++) { printf("%d ",arr[i]); } return 0; }