排序算法 - 计数排序(C++)

来源:互联网 发布:nba 东西部实力 知乎 编辑:程序博客网 时间:2024/05/11 17:07
/*************************************************** * array: *array that to be sorted. * nLength: *length of array * nK: *可能出现的最大数字(对10进制数排序则nK=9).***************************************************/void CountingSort(int array[], size_t nLength, int nK){if (NULL == array || 0 == nLength || 0 == nK)return;int *count = new int[nK+1];memset(count, 0, sizeof(int)*(nK+1));int *arrayResult = new int[nLength];memset(arrayResult, 0, sizeof(int)*nLength);// 先计数,count[idx]为值等于idx的元素的个数for (int idx = 0; idx<nLength; idx++)count[array[idx]]++;// 再累加,count[idx]为小于等于idx的元素的个数for (int idx = 1; idx<nK+1; idx++)count[idx] = count[idx] + count[idx-1];// 从后向前循环(保证排序稳定), 根据指定位的数字大小// 将array[idx]排在所有小于等于array[idx]的数(共count[array[idx]]个)的后面for (int idx=nLength-1; idx>=0; idx--){arrayResult[count[array[idx]]-1] = array[idx];count[array[idx]]--;}memcpy(array, arrayResult, sizeof(int)*nLength);delete [] count;delete [] arrayResult;}

原创粉丝点击