程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> [算法導論]c++實現計數排序

[算法導論]c++實現計數排序

編輯:C++入門知識

計數排序的基本思想為:對每一個輸入的元素x,確定出小於x的元素的個數。有了這一信息,那麼就可以把x直接放到相應的位置上。
特點:
1 需要臨時的存儲空間,如果排序數據范圍特別大時,空間開銷很大。
2 適合於排序0 - 100以內的數據。
3 排序的時間復雜度為O(n)。
[cpp] 
#include <iostream> 
#include <string> 
 
const int size = 100; 
int * array_list; 
int * array_list_a; 
void print_list(int * ,int ); 
void count_sort(int * ,int * ,int ); 
 
int main(int argc,char * argv[]) 

     
    array_list = new int [sizeof(int)*size]; 
    array_list_a = new int [sizeof(int)*size]; 
    srand(0); 
    for(int i=0;i<size;i++) 
    {/*隨機的填充數組元素*/ 
        int ran_num=rand()% size; 
        array_list[i] = ran_num; 
    } 
    print_list(array_list,size); 
    count_sort(array_list, array_list_a, size); 
    print_list(array_list_a,size); 
    delete array_list; 
    delete array_list_a; 
    return 0; 

/*假設輸入的數據都是介於0 - k 的數*/ 
void count_sort(int * array_list_a,int * array_list_b,int k) 

    int * c = new int [sizeof(int) * k]; 
    for(int i=0;i<k;i++) 
    {/*初始化臨時數組*/ 
        c[i] = 0; 
    } 
    for(int i=0;i<size;i++) 
    {/*對於輸入數組的重復的數值進行統計,在臨時數組c的相應的位置予以記錄*/ 
        c[array_list_a[i]] += 1;  
    } 
    for(int i=1;i<k;i++) 
    {/*小於當前數據元素的個數*/ 
        c[i] += c[i-1]; 
    } 
    for(int j=size-1;j>=0;j--) 
    { 
        array_list_b[c[array_list_a[j]] - 1] = array_list_a[j]; 
        c[array_list_a[j]] -= 1; 
    } 
    delete c; 

void print_list(int * array_list,int length) 

    for(int i=0;i<length;i++) 
    { 
        std::cout<<array_list[i]<<"\t"; 
    } 
    std::cout<<std::endl; 

作者:Harry_lyc

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved