标签: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