#include <stdlib.h>
#include <string.h>
void CountingSort(int* _arr, int _len, int _max_value){//_max_value为_arr[1..._len]中的最大值
if(_arr && _len > 1){
int* temparr = (int*)malloc(sizeof(int)*_len);
int* c = (int*)malloc(sizeof(int)*(_max_value+1));
memset(c, 0, _max_value+1);
memset(temparr, 0, _len);
//统计当下标为i时值的个数
for(int i = 0; i < _len; ++i) c[_arr[i]] += 1;
//统计值小于等于i的个数
for(int j = 1; j <= _max_value; ++j) c[j] += c[j-1];
for(int k = _len-1; k >= 0; --k){
temparr[c[_arr[k]]-1] = _arr[k];
--c[_arr[k]];
}
for(int i = 0; i < _len; ++i) _arr[i] = temparr[i];
free(temparr);
free(c);
}
}
计数排序(代码片段)
最新推荐文章于 2024-08-22 10:56:53 发布