【待完善】键索引计数法(Key-indexed counting)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wingrez/article/details/88084592
#include<cstdio>
#include<cstdlib>
#include<ctime>

const int num=20;//元素个数 
const int R=5;//基数 
int arr[num];//待排序数组 

void key_index_counting(){
	int count[R+1]={0};
	int aux[num]={0};//辅助数组 
	for(int i=0;i<num;i++){//计算出现的频率 
		count[arr[i]+1]++;
	}
	for(int r=0;r<R;r++){//将频率转换为索引 
		count[r+1]+=count[r];
	}
	for(int i=0;i<num;i++){//将元素分类 
		aux[count[arr[i]]++]=arr[i];
	}
	for(int i=0;i<num;i++){//回写 
		arr[i]=aux[i];
	}
}

int main(){
	srand((long long)time(NULL));
	printf("生成随机数据:\n");
	for(int i=0;i<num;i++){
		arr[i]=rand()%R;
	}
	for(int i=0;i<num;i++){
		printf("%d ",arr[i]);
	}
	printf("\n\n排序后的数据:\n");
	key_index_counting();
	for(int i=0;i<num;i++){
		printf("%d ",arr[i]);
	}
	printf("\n");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/wingrez/article/details/88084592