算法说明 基数排序是基于计数排序的,所以看这个之前要先看一下计数排序对于理解基数排序是很有帮助的(发现计数和基数的音节几乎一致啊).这个我有写,请点击. OK,现在你肯定已经熟悉了计数排序,那么我就来说一下基数排序. 所谓基数排序,其实就是分别对数字的个位,十位,百位,百位....分别进行计数排序. 当然可以从个位往上进行计数排序,也可以从高位往个数计数排序,这里我们使用个位往上计数排序的方法. 话说,我想了好半天,不知道从哪里入手说基排(鸡排,哈哈)的思路……好蛋疼 这样,先从与计数排序的区别…
算法说明 若领图排序是分布排序的一种. 个人理解,若领图排序算是桶排序+计数排序的变异版,桶排序计数排序理解了,那么若领图排序理解起来就会比较容易.区别其实就是存储中间值的方式做了调整…… 话说,这个代码我写的很烂很吃力,而且写好几个小时才写好,再次证明我的资质真的很差哟... 好了,结合代码大概说一下流程,其实主要是希望将来我自己再看到后能很快的回忆出思路... 1.找出待排数组的最大值(20-25行代码). 2.根据最大值,建立计数数组,并对待排数组每个值进行计数(28-31行代码)(这个计…
---恢复内容开始--- 算法说明 珠排序是分布排序的一种. 说实在的,这个排序看起来特别的巧妙,同时也特别好理解,不过不太容易写成代码,哈哈. 这里其实分析的特别好了,我就不画蛇添足啦.  大家看一下这个分析,特别特别简单的. 然后我对于下面的代码做一下描述: 1.找到数组的最大值(20-23行代码) 2.创建珠排序的容器,并且进行初始化(28-34行代码) 3.进行排序(39-44行代码),这里是珠排序的核心,也不太好解释,所以还是举例子啦. 例如排序的数组是int[] arr = { 2,…
算法说明 鸽巢排序是分布排序的一种,我理解其实鸽巢就是计数排序的简化版,不同之处就是鸽巢是不稳定的,计数排序是稳定的. 逻辑很简单,就是先找出待排数组的最大值maxNum,然后实例一个maxNum+1长度的数组. 例如待排数组int[] arrayData = { 22, 33, 57, 55, 58, 77, 44, 65, 58, 42 }; 最大值是77.然后实例一个int[] arrayTemp = new int[77]的数组. 然后呢,循环arrayData.然后第一个数字是22,…
算法说明 锦标赛排序是选择排序的一种. 实际上堆排序是锦标赛排序的优化版本,它们时间复杂度都是O(nlog2n),不同之处是堆排序的空间复杂度(O(1))远远低于锦标赛的空间复杂度(O(2n-1)) 堆排序是基于二叉树的, 所以锦标赛排序也是基于二叉树的,并且是完美二叉树. 我尝试用最通俗的方法来做一下解释,如果我说的不大清楚,建议大家直接看下边的代码啦. 1.例如我们要对int[] arrayData = { 5, 9, 6, 7, 4, 1, 2, 3, 8 };进行升序排序 2.我们根据锦…
算法说明 圈排序是选择排序的一种.其实感觉和快排有一点点像,但根本不同之处就是丫的移动的是当前数字,而不像快排一样移动的是其它数字.根据比较移动到不需要移动时,就代表一圈结束.最终要进行n-1圈的比较.   这个比较说起来比较抽象,所以举例子是最好的方法,这里例子使用的是这里的,望见谅: 待排数组[ 6 2 4 1 5 9 ] 第一步,将6取出来,计算出有4个数字比6小,将6放入索引4,同时原索引4位置的数字5出列 排序之前[ 0 2 4 1 5 9 ] 6 排序之后[ 0 2 4 1 6 9…
算法说明梳排序是交换排序的一种,它其实也是改自冒泡排序,不同之处是冒泡排序的比较步长恒定为1,而梳排序的比较步长是变化的. 步长需要循环以数组长度除以1.3,到最后大于等于1即可. 光说可能比较抽象,所以实例举个例子可能会好些,这里使用的例子从这里转载过来的 假设待数组[8 4 3 7 6 5 2 1] 待排数组长度为8,而8÷1.3=6,则比较8和2,4和1,并做交换 [8 4 3 7 6 5 2 1] [8 4 3 7 6 5 2 1] 交换后的结果为 [2 1 3 7 6 5 8 4] 第…
算法说明 地精排序是交换排序的一种,它是冒泡排序的一种改良,我感觉和鸡尾酒排序挺像的. 不同之处是鸡尾酒排序是从小到大,然后再从大到小切换着排序的.而地精排序是上来先从小到大排序,碰到交换到再从大到小,接着再从小到大进行排序. 举个例子: 对8,6,4,5,1进行升序排序 1.8与6交换,结果是 {6,8,4,5,1} 2.8与4交换,结果是 {6,4,8,5,1} 3.4与6交换,结果是 {4,6,8,5,1} 4.5与8交换,结果是 {4,6,5,8,1} 5.6与5交换,结果是 {4,5,…
算法说明 Bogo排序是交换排序的一种,它是一种随机排序,也是一种没有使用意义的排序,同样也是一种我觉得很好玩的排序. 举个形象的例子,你手头有一副乱序的扑克牌,然后往天上不停的扔,那么有一定机率会变成有序的. 哈哈,就是这样. 看一下代码大家就知道了. 代码 使用的是java package hark.sort.exchangesort; import java.util.Random; /* * Bogo排序 */ public class BogoSort { public static…
算法说明 个人感觉是没有意义的算法,只是用来作为学术研究.或者说开拓一下思维. 从wikipedia copy来的一句解释的话:Stooge排序是一种低效的递归排序算法,甚至慢于冒泡排序.在<算法导论>第二版第7章(快速排序)的思考题中被提到,是由Howard.Fine等教授提出的所谓“漂亮的”排序算法. 实现逻辑: 同样也是从wikipedia copy来的 1.如果最后一个值小于第一个值,则交换这两个数2.如果当前集合元素数量大于等于3:3.使用臭皮匠排序前2/3的元素4.使用臭皮匠排序后…