经典排序算法(五)--鸽巢排序Pigeonhole Sort

原理类似桶排序,同样需要一个很大的鸽巢[桶排序里管这个叫桶,名字无所谓了]

鸽巢其实就是数组啦,数组的索引位置就表示值,该索引位置的值表示出现次数,如果全部为1次或0次那就是桶排序

例如

var pigeonHole = new int[100];

pigeonHole[0]的值表示0的出现次数...

pigeonHole[1]的值表示1的出现次数...

pigeonHole[2]的值表示2的出现次数...

举例

var pigeonHole = new int[10];//10个位置

var A = new int[] { 6, 6, 2, 2, 2, 4, 1, 1, 1, 5, 5, 5, 5, 9 };//待排序数组

foreach (var item in A)

            {

                pigeonHole[item]++;//如pigeonHole[6]++会执行两次,结果为2

            }

鸽巢索引:0 1 2 3 4 5 6 7 8 9

索引次数:0 3 3 0 1 4 2 0 0 1

//顺序输出

for (int i = 0; i < pigeonHole.Length; i++)//索引i就是值

            {

//pigeonHole[i]处的值是数字i出现的次数

//如6出现了两次,那么pigeonHole[6] = 2

//0没出现,那么pigeonHole[0] = 0,表示待排数组里没有这个值:0

for (int j = 0; j < pigeonHole[i]; j++)//i出现就次就输出几个

                {

Console.WriteLine(i);//1,1,1,2,2,2,4,5,5,5,5,6,6,9

                }

            }

参考http://hi.baidu.com/wangxvfeng101/blog/item/a2c22560e57260c58cb10d8c.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值