/// <summary>
/// 鸽巢排序
/// 创建一个长度大于等于待排序数组array元素中最大值的标记数组mark,
/// 将数组array中元素值个数映射到mark数组中。
/// 即array数组中的元素值对应mark数组的索引,
/// array数组中该元素出现的个数对应mark数组索引的值。
/// 然后将mark元素中出现的(不等于0)的索引值及个数依次放入array中。
/// </summary>
/// <param name="array">待排序数组</param>
/// <param name="maxValueInArray">数组array中的最大元素值</param>
public void PigeonholeSort(int[] array, int maxValueInArray)
{
int[] mark = new int[maxValueInArray + ];
for (int i = ; i < array.Length; i++)
{
///标记array数组中元素出现的次数
mark[array[i]]++;
}
int arrayIndex = ;
///重新对array的赋值
for (int i = ; i < mark.Length; i++)
{
///从array最小元素值 i 开始,i 出现的次数
for (int j = ; j < mark[i]; j++)
{
///依次对数组array的元素更新为最小值 i 及 个数 j
array[arrayIndex++] = i;
}
}
}
/// <summary>
/// 获取数组array中的最大元素值
/// </summary>
/// <param name="array">数组</param>
/// <returns>最大元素值</returns>
public int Max(int[] array)
{
int max = -;
foreach (int item in array)
if (item > max)
max = item;
return max;
}

最坏时间复杂度: O(N+n)
最好时间复杂度: O(N+n)
平均时间复杂度: O(N+n)
最坏空间复杂度: O(N*n)

C#实现鸽巢排序的更多相关文章

  1. Hark的数据结构与算法练习之鸽巢排序

    算法说明 鸽巢排序是分布排序的一种,我理解其实鸽巢就是计数排序的简化版,不同之处就是鸽巢是不稳定的,计数排序是稳定的. 逻辑很简单,就是先找出待排数组的最大值maxNum,然后实例一个maxNum+1 ...

  2. 鸽巢排序Pigeonhole sort

    原理类似桶排序,同样需要一个很大的鸽巢[桶排序里管这个叫桶,名字无所谓了] 鸽巢其实就是数组啦,数组的索引位置就表示值,该索引位置的值表示出现次数,如果全部为1次或0次那就是桶排序 例如 var pi ...

  3. POJ 3370. Halloween treats 抽屉原理 / 鸽巢原理

    Halloween treats Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7644   Accepted: 2798 ...

  4. POJ 2356. Find a multiple 抽屉原理 / 鸽巢原理

    Find a multiple Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7192   Accepted: 3138   ...

  5. cf319.B. Modulo Sum(dp && 鸽巢原理 && 同余模)

    B. Modulo Sum time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  6. poj 2356 Find a multiple(鸽巢原理)

    Description The input contains N natural (i.e. positive integer) numbers ( N <= ). Each of that n ...

  7. poj2356 Find a multiple(抽屉原理|鸽巢原理)

    /* 引用过来的 题意: 给出N个数,问其中是否存在M个数使其满足M个数的和是N的倍数,如果有多组解, 随意输出一组即可.若不存在,输出 0. 题解: 首先必须声明的一点是本题是一定是有解的.原理根据 ...

  8. NYOJ 417 死神来了 鸽巢原理

    死神来了 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 有一天,王小子在遨游世界时,遇到了一场自然灾害.一个人孤独的在一个岛上,没有吃的没有喝的.在他饥寒交迫将要死亡时 ...

  9. HDU 1005 Number Sequence【多解,暴力打表,鸽巢原理】

    Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

随机推荐

  1. Android --日期控件使用并显示选择的日期

    1. main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns: ...

  2. Selenium_用selenium webdriver实现selenium RC中的类似的方法

    最近想总结一下学习selenium webdriver的情况,于是就想用selenium webdriver里面的方法来实现selenium RC中操作的一些方法.目前封装了一个ActionDrive ...

  3. Spring MVC过滤器-字符集过滤器(CharacterEncodingFilter)

    spring的字符集过滤通过用于处理项目中的乱码问题,该过滤器位于org.springframework.web.filter包中,指向类CharacterEncodingFilter,Charact ...

  4. Lrucache缓存技术

    在Android中,有一个叫做LruCache类专门用来做图片缓存处理的. 它有一个特点,当缓存的图片达到了预先设定的值的时候,那么近期使用次数最少的图片就会被回收掉. 步骤: (1)要先设置缓存图片 ...

  5. mysql错误代码整理

    1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败1008:数据库不存在,删除数据库失败1009:不能删除数据库文件导致删除数据库失败1010:不能删除数据目录导致删除 ...

  6. iis上json解析失败404

    控制面板->打开或关闭windows功能->Internet信息服务->万维网服务->应用程序开发功能,勾选上“.net扩展性”和“ASP.NET”,保存后,重启IIS服务器. ...

  7. 解决在web项目使用log4j中无法将log信息写入文件

    这是log4j.properties中关于的配置 log4j.appender.appender2.File=F:/myeclipseworkspace2/SecondBook2/log/second ...

  8. Windows内核 WDM驱动程序的基本结构和实例

    WDM驱动的基本结构: WDM驱动模型是建立在NT式驱动程序模型基础之上的.对于WDM驱动程序来说,一般都是基于分层的,即完成一个设备的操作,至少要由两个驱动设备共同完成. 1)物理设备对象和功能设备 ...

  9. CentOS通过日志反查入侵

    使用 last -f /var/log/wtmp 来查看可疑ip登录 查看/var/log/secure保存的系统信息 来确定可以ip登录

  10. 使用safe-rm替代rm

    safe-rm主页: https://launchpad.net/safe-rm 一.下载safe-rm 二.解压文件,拷贝safe-rm到/usr/local/bin/目录下 三.建立软连接: #l ...