// 计数排序(优化版),作者:C语言技术网(www.freecplus.net)码农有道。 #include #include #include // 获取待排序数组的最小和最大元素的值。 void arrminmax(int *arr,unsigned int len,int *min,int *max) { int ii=0; *min=*max=arr[0]; for (ii=0;iiarr[ii]) *min=arr[ii]; } } // 计数排序主函数,arr-待排序数组的地址,len-数组的长度。 void countsort(int *arr,unsigned int len) { if (len<2) return; // 获取待排序数组的最小和最大大元素的值。 int imin,imax; arrminmax(arr,len,&imin,&imax); int arrtmp[imax-imin+1]; // 临时数组的大小为imax+1。 memset(arrtmp,0,sizeof(arrtmp)); // 初始化临时数组。 int ii,jj,kk; // 临时数组计数。 for (ii=0;ii