摘要: 基数排序 就是先比较数组中元素的个位数,排序得到新的数组,然后比较新的数组中的十位数,排序得到新数组,然后再对最新得到的数组比较百位数.......依次循环比如{82 ,31 ,29 ,71, 72, 42, 64, 5,110} 比较个位数 排序 得到新数列{110,31,71,82,72,42,64,5,29} 然后对新数列比较十位数{110,29,31,42,64,71,72,82} 然后比较百位数,没有百位数的算作0,所以得到{29,31,42,64,71,72,82,110}代码如下://基数排序 arrays是需要排序的数组 List list = new Arra... 阅读全文
posted @ 2014-03-13 23:36 huliangbin 阅读(417) 评论(0) 推荐(0) 编辑
摘要: 堆排序就是用大根堆或者小根堆的节点都比左孩子 右孩子大(小)的特性 来构建有序序列。名词解释:大根堆:所有节点(n)都比他的左孩子(2n+1)与右孩子(2n+2)大的完全二叉树。小根堆:所有节点(n)都比他的左孩子(2n+1)与右孩子(2n+2)小的完全二叉树。完全二叉树:深度为n的完全二叉树,在1到n-1层数上 节点的个数符合2^(n-1)。最后一程的节点,倒数第二层的节点,如果有有右孩子,则必有左孩子,如果下一个节点有孩子,则前一个节点必然有孩子。堆排序首先建立一个大根堆(小根堆),然后根节点(root)的数与最后一个数(last)互换,现在本来在last的位置的数 跑到了根节点,本来在根 阅读全文
posted @ 2014-03-13 21:56 huliangbin 阅读(1319) 评论(0) 推荐(0) 编辑
摘要: 直接选择排序的逻辑非常简单,数组{A1.......An} 先在{A1........An}去获取最小的 与A1交换位置 然后在{A2..........An}中取出最小的 与A2交换位置.....一直到An代码如下 //选择排序 for(int num = 0; num<arrays.length-1; num++){ int index = num; for(int num1 = num;num1<arrays.length;num1++){ if(arrays[num1] < arra... 阅读全文
posted @ 2014-03-13 19:43 huliangbin 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 期望时间复杂度o(nlogn) 最坏情况时间复杂度o(n^2);无序数组{A1.........An} 先取一个基数K=A1,设置从后往前遍历的索引j(初始值为arrays.length-1),从前往后遍历的索引i(初始值为0)。从后往前遍历时(j--),找到第一个小于K的数,交换两个数的位置,记录index,然后从前往后遍历,找到第一个大于K的数,于索引index的数(K)交换位置,刷新index。然后从上次后往前停留的索引出开始往前找小于K的数........ 总的来说就是 重复从后往前找更小的交换位置 从前往后找更大的交换位置 直到i=j跳出循环以上是一趟排序过程 结果就是K左边的数都. 阅读全文
posted @ 2014-03-13 19:05 huliangbin 阅读(326) 评论(0) 推荐(0) 编辑
摘要: 冒泡排序,就是每次遍历都会把最小(或者最大)的数放在前面。比如要升序{A1,........An} 第一次排序要取出整个数组中最小放在A1的位置,从An开始往前遍历,相邻两个数比较,如果Aj num; num1--){ if(arrays[num1] < arrays[num1-1]){ int temp = arrays[num1]; arrays[num1] = arrays[num1-1]; arrays[num1-1] = temp; ... 阅读全文
posted @ 2014-03-13 17:42 huliangbin 阅读(402) 评论(0) 推荐(0) 编辑
摘要: 上篇blog中介绍的直接插入排序,希尔排序就是对直接插入排序的一个优化。比如有这么一种情况:对一个无序数组进行从小到大的排序,但是数组的最后一个位置的数是最小的,我们要把它挪到第一个位置,其他位置的都要往后移动,要是这个数组非常大,那么直接插入排序的开销就非常大。 现在有一个array,希尔排序就是设定一个增量incrementNum(0=1){ for(int i=0;iarrays[j+incrementNum]){ int temple = arrays[j]; arr... 阅读全文
posted @ 2014-03-13 17:19 huliangbin 阅读(14937) 评论(3) 推荐(1) 编辑
摘要: 这几天看排序算法,网上大多数排序算法的解释都是“过于专业”,导致一时半会看不明白到底在说什么玩意。现在总结下几大排序算法(java实现)1.直接插入排序说的简单点,就是一组无序序列{A1,A2,........An} 先取出A1,然后从A2与A1比较,比较完之后序列状况是{A1,A2}{A3..........An}, 其中{A1,A2}有序, 然后取出A3 ,放到{A1,A2}有序序列合适位置,导致{A1,A2,A3}{A4........An}。重复这个过程,直到取出An放入{A1,A2........An-1}有序序列中。java实现代码如下(利用LinkedList作为辅助序列) .. 阅读全文
posted @ 2014-03-13 00:39 huliangbin 阅读(2507) 评论(1) 推荐(1) 编辑