zoukankan      html  css  js  c++  java
  • 经典排序之 计数排序

    今天来简单说一下计数排序

    当要实现一个排序算法要求时间复杂度是O(n),允许使用常量大小的辅助空间,并且数据的大小在一个可控的范围内,就可以使用计数排序了,也就是辅助数组的大小记录数据的个数,然后输出即可;

    算法实现:

     1 #include<iostream>
     2 #include<stdlib.h>
     3 using namespace std;
     4 
     5 void countSort(int *data, int length){
     6     if(data == NULL || length < 0){
     7         return;
     8     }
     9     
    10     const int num = 60;
    11     int counter[num + 1];
    12     
    13     for(int i = 0; i <= num; ++i){                     //初始化每个数组元素
    14         counter[i] = 0;
    15     }
    16     
    17     for(int i = 0; i < length; ++i){
    18         int tags = data[i];
    19         if(tags < 0 || tags > 60){
    20             cout<<"invalid number"<<endl;
    21         }
    22         
    23         ++counter[tags];                               //记录数组中每个元素的个数
    24     }
    25 
    26 
    27     int index = 0;
    28 
    29     for(int i = 0; i <= num; ++i){                     //将记录的值付给初始的数组,即排好序的数组了
    30         for(int j = 0; j < counter[i]; ++j){
    31             data[index] = i;
    32             ++index;
    33         } 
    34     }
    35 }
    36 
    37 int main(){
    38     int str[1000];
    39     for(int i = 0; i < 1000; i++){
    40         str[i] = rand() % 60;                           //随机数产生1000个在0~59之间的数字,进行测试
    41     }
    42     
    43     countSort(str, 1000);
    44     
    45     for(int i = 0; i < 1000; i++){
    46         cout<<str[i]<<' ';
    47     }
    48     
    49     return 0;
    50 }

  • 相关阅读:
    HDU 2594 扩展kmp模板题
    HDU 1358 简单kmp
    HDU 3336 扩展kmp
    SPOJ SUBLEX 求第k小子串
    Codeforces 235C
    HDU 4622 Reincarnation
    HDU 4622 求解区间字符串中的不同子串的个数
    [LeetCode] Length of Last Word 字符串查找
    [LeetCode] Sudoku Solver 解数独,递归,回溯
    [LeetCode] Longest Common Prefix 字符串公有前序
  • 原文地址:https://www.cnblogs.com/dormant/p/5322058.html
Copyright © 2011-2022 走看看