标签:ret 情况 基本 数据结构 tin title 稳定性 name art
本文转自:http://blog.csdn.net/SunnyYoona/article/details/24551123
一 引言
/*********************************
* 日期:2014-04-26
* 作者:SJF0115
* 题目: 计数排序
**********************************/
#include <iostream>
#include <stdio.h>
using namespace std;
void COUNTINGSORT(int *A,int *B,int len,int k){
if(A == NULL || k <= 0 || len <= 0){
return;
}
int C[k+1],i;
//初始化
for(i = 0;i <= k;i++){
C[i] = 0;
}
//统计值为A[i]的个数,C[i]是等于i的元素个数
for(i = 0;i < len;i++){
C[A[i]] ++;
}
//确定值A[i]在最终输出数组B中位置,C[i]是小于等于i的元素个数
for(i = 1;i <= k;i++){
C[i] += C[i-1];
}
//输出到数组B中
for(i = len-1;i >= 0;i--){
//index元素A[i]在数组B中的下标
int index = C[A[i]];
B[index] = A[i];
//如果有相同值元素的情况
C[A[i]] --;
}
//B下标从1开始
}
int main(){
int A[8] = {2,5,3,0,2,3,0,3};
int B[9];
COUNTINGSORT(A,B,8,5);
for(int i = 1;i <= 8;i++){
printf("%d\n",B[i]);
}
return 0;
}
1. 提前必须是已知待排序的关键字为整型且范围已知。
2. 时间复杂度为O(n+k),不是基于比较的排序算法,因此效率非常之高。
3. 稳定性好,这个是计数排序非常重要的特性,可以用在后面介绍的基数排序中。
4. 但需要一些辅助数组,如C[0..k],因此待排序的关键字范围0~k不宜过大。
标签:ret 情况 基本 数据结构 tin title 稳定性 name art
原文地址:http://www.cnblogs.com/mhpp/p/6692269.html