【算法导论】C++实现计数排序
计数排序的基本思想为:对每一个输入的元素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;
 - }
 
相关推荐
  zlxcsdn    2020-09-13  
   listep    2020-09-11  
   jokewinl    2020-07-18  
   liuyang000    2020-04-25  
   rein0    2020-04-18  
   wordmhg    2020-04-09  
   wangqing    2020-04-06  
   chaoxiao    2020-03-07  
   horizonheart    2020-02-16  
   adonislu    2020-02-14  
   sschencn    2020-02-14  
   嗡汤圆    2020-02-02  
   yuanran0    2020-01-30  
   shawsun    2020-01-20  
   wuxiaosi0    2020-01-08  
   yedaoxiaodi    2020-01-04  
   zhglinux    2020-01-03  
   程松    2020-01-01