zoukankan      html  css  js  c++  java
  • 鸽巢排序Pigeonhole Sort----(排序算法八)

    1.算法原理

    鸽巢排序是对桶排序算法的改进,只是桶中装对应下标放元素出现的次数

    待排序数组:a[14] ={ 6, 6, 2, 2, 2, 4, 1, 1, 1, 5, 5, 5, 5, 9 };

    桶中: bucket[10]=0  3  3  0  1  4  2  0  0  1

    1出次3次,所以bucket[1]=3

    2出次3次,所以bucket[2]=3

    4出次1次,所以bucket[4]=1

    5出次4次,所以bucket[5]=4

    6出次2次,所以bucket[6]=2

    9出次1次,所以bucket[9]=1


    2.代码实现

    #include <stdio.h>
    
    //printArray打印出数组
    void printArray(int a[],int size){  
     //   printf("数组为:[%d] ",a[0]);  
        for (int i=0;i<size;i++)  
        {  
            printf(" %x ",a[i]);  
        }  
        printf("
    ");  
    }
    
    
    void main()
    {
       int  a[14] ={ 6, 6, 2, 2, 2, 4, 1, 1, 1, 5, 5, 5, 5, 9 };
       int  len=14;
        //分配空桶
       int  bucket[10]={0} ;
       printf("排序前:");
       printArray(a,len);
    	//直接以每个待排数字为索引,将自己的值赋值给当前桶
       for (int i = 0; i < len; i++) {
              bucket[a[i]]++;
        }
       printf("桶中:");
       printArray(bucket,10);
    	//跳过值为0的空桶,顺序输出即可
    	int temp=0;
    	for (int j = 0; j < 10; j++){
    		while(bucket[j]-->0)
    			a[temp++]=j;
         }
    	printf("排序后:");
    	printArray(a,len);
    	
    }
    
    
    



    3.排序结果

    排序前: 6  6  2  2  2  4  1  1  1  5  5  5  5  9
    桶中: 0  3  3  0  1  4  2  0  0  1
    排序后: 1  1  1  2  2  2  4  5  5  5  5  6  6  9
    
    


  • 相关阅读:
    跨域请求携带cookie
    vue keep-alive
    关于js replace 第二个参数时函数时,函数参数解析
    前端开发规范之CSS
    git命令集合(正在完善中...)
    怎么写jQuery的插件
    git命令集合
    GitHub创建静态网站预览方法
    正则表达式
    各种浏览器全屏模式的方法、属性和事件介绍
  • 原文地址:https://www.cnblogs.com/whzhaochao/p/5023470.html
Copyright © 2011-2022 走看看