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

编程入门 行业动态 更新时间:2024-10-25 04:24:36

Hark的<a href=https://www.elefans.com/category/jswz/34/1769880.html style=数据结构与算法练习之鸽巢排序"/>

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

算法说明

鸽巢排序是分布排序的一种,我理解其实鸽巢就是计数排序的简化版,不同之处就是鸽巢是不稳定的,计数排序是稳定的。

逻辑很简单,就是先找出待排数组的最大值maxNum,然后实例一个maxNum+1长度的数组。

例如待排数组int[] arrayData = { 22, 33, 57, 55, 58, 77, 44, 65, 58, 42 };

最大值是77.然后实例一个int[] arrayTemp = new int[77]的数组。

然后呢,循环arrayData。然后第一个数字是22, 那么arrayTemp[22]++。  

然后第二个数字是33,那么arrayTemp[33]++。

接着arrayTemp[57]++

arrayTemp[55]++

.....

...

最后arrayTemp[42]++

最后将arrayTemp数组输出至原始数组中,那么原始数组就是排序后的数组了。

很easy吧!

 

代码

使用的是java

package hark.sort.distributionsort;/** 鸽巢排序*/
public class PigeonholeSort {public static void main(String[] args) {int[] arrayData = { 22, 33, 57, 55, 58, 77, 44, 65, 58, 42 };PigeonhomeSortMethod(arrayData);for (int integer : arrayData) {System.out.print(integer);System.out.print(" ");}}public static void PigeonhomeSortMethod(int[] arrayData) {int maxNum = 0;for (int i = 0; i < arrayData.length; i++) {if (arrayData[i] > maxNum) {maxNum = arrayData[i];}}int[] arrayTemp = new int[maxNum + 1];for (int i = 0; i < arrayData.length; i++) {arrayTemp[arrayData[i]]++;}int index = 0;for (int i = 0; i < maxNum + 1; i++) {for (int j = 0; j < arrayTemp[i]; j++) {arrayData[index++] = i;}}}
}

  

 

参考

.html

转载于:.html

更多推荐

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

本文发布于:2024-03-08 21:12:12,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1722384.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数据结构   算法   Hark

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!