【演算法導論】c++實現計數排序
阿新 • • 發佈:2019-01-10
計數排序的基本思想為:對每一個輸入的元素x,確定出小於x的元素的個數。有了這一資訊,那麼就可以把x直接放到相應的位置上。
特點:
1 需要臨時的儲存空間,如果排序資料範圍特別大時,空間開銷很大。
2 適合於排序0 - 100以內的資料。
3 排序的時間複雜度為O(n)。
#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; }