• 鸽巢排序


    鸽巢排序的基本思想是:

                   假设我们要排序的数组为init_array,设其中最大元素为Max。额外分配一个长度为Max的int类型数组temp[Max],数组中元素初始都为0,算法开始循环地将temp中下标为init_array[i]处的元素置一个常数a(假设为1);然后从0开始扫描数组init_array,遇到temp中值为这个常数a的元素时,将其依次存入数组init_array中,此时init_array中存储的就是已排序的元素。

        整个程序的实现如下所示:

     
    1. #include <iostream>  
    2. using namespace std;  
    3. void pigen_hole_sort(int *array,int length);  
    4. int main()  
    5. {  
    6.     int init_array[10] = {4,6,1,8,9,2,3,5,7,0};  
    7.       
    8.     pigen_hole_sort(init_array,10);  
    9.       
    10.     for(int i = 0;i != 10;i++)  
    11.         cout << init_array[i] << " ";  
    12.       
    13.     system("pause");  
    14.     return -1;      
    15. }  
    16. void pigen_hole_sort(int *array, int length)  
    17. {  
    18.     int b[256] = {0};  
    19.     for(int i = 0; i != length; i++)  
    20.         b[array[i]]++;  
    21.     for(int i = 0; i != 256; i++)  
    22.         for(int k = 0; k < b[i]; k++)  
    23.             array[i] = i;  
    24. }  

        这个算法的时间复杂度为O(Max),因为算法的第二次for循环中若把常数设置为1的话实际只执行1次,可用if(b[i]==1)代替。空间复杂度也为O(Max),因为另外开辟了Max的空间。

         鸽巢排序算法的限制条件有两个:一是数组中存储的必须是int类型或者转换为int类型不丢失真实数据的数据类型;二是必须事先预测到数组中存储的最大元素,在程序运行过程中求得后因为不是const值,所以无法用int b[Max] = {0};来初始化数组b.

  • 相关阅读:
    os 模块1
    除法
    python基础四(jsonossys andomstring模块、文件、函数)
    python基础三(集合、文件)
    linux下mysql安装
    linux下tomcat安装
    linux系统jdk安装
    python基础二(list,tuple元祖、dic字典,字符串)
    python基础一(安装、变量、循环、git)
    charles抓包
  • 原文地址:https://www.cnblogs.com/cobbliu/p/2388796.html
Copyright © 2020-2023  润新知