随笔分类 -  数据结构与算法

摘要:希尔排序是插入排序的一种类型,也可以用一个形象的叫法缩小增量法。基本思想就是把一个数组分为好几个数组,有点像分治法,不过这里的划分是用一个常量d来控制。这个0<d<n,n为数组的长度。这个算法有了插入排序的速度,也可以算是一个改进算法,在插入算法中,如果有一个最小的数在数组的最后面,用插入算法就会重最后一个位置移动到第一个,这样就会浪费很大,使用这个改进的希尔排序可以实现数据元素的大跨度的移动。也就是这个算法的优越之处。希尔排序过程图解:数组:45,20,80,40,26,58,66,70d=5时 分组为:45,58 20,66 80,70排完后为: 45,2... 阅读全文
posted @ 2012-09-11 00:44 春天的故事 阅读(8513) 评论(1) 推荐(2)
摘要:1、插入排序插入是比较简单的一种排序方法,基本思想就是把数据分组两段,一部分是有序,另一部分是待排序的。把有序的数据不断的加大到全数组完成排序。代码完成如下:class insert { public void insert_sort(int[] arrays){ for(int i=0;i<arrays.length;i++){ for(int j=i;j>0;j--){ if(j==0) continue; if(arrays[j]>arrays[j-... 阅读全文
posted @ 2012-09-10 16:36 春天的故事 阅读(500) 评论(0) 推荐(1)
摘要:快速排序法与一般的冒泡排序法差不多,区别可能就是冒泡会不断的交换,而快速排序法先找到最小的那个值,然后把这个最小值放在数组的最前面,游标往下走,举个例子:原数组:4,5,1,7,6第一趟:1,5,4,7,6第二趟:1,4,5,7,6第三趟:1,4,5,6,7这个原理比较简单。代码由下:class Select{ public void select_sort(int[] arrays){ int min=0; int begin=0; for(int i=0;i<arrays.length;i++){ for(int j=i... 阅读全文
posted @ 2012-09-05 00:38 春天的故事 阅读(544) 评论(0) 推荐(1)
摘要:堆排序是一种利用完全二叉树来解决问题的高效算法,合法的最大堆树要满足一个条件就是每一个结点值都要大于或等于它的孩子结点值。在一个数组中那专业法表示为:arrays[i]>=arrays[2*i+1] && arrays[i]>=arrays[2*i+2]; 最小堆类似,只要改为冒最小值即可。堆排序树的构造过程找最大值过程由下图,数组arrays[0....n]为:17,8,45,84,2,94,刚找到最大值后把最大值即94放在数组的最后面arrays[n],然后进入递归把arrays[0...n-1]再进入下面图这个过程,只是把排好序的最大值不放入到这个过程中,就这 阅读全文
posted @ 2012-09-04 22:11 春天的故事 阅读(13937) 评论(1) 推荐(0)
摘要:合并排序算法是用分治策略实现对N个元素进行排序的算法。其基本思想是:将待排序元素分成大小大致相同 的两个子集合,分别 对两个子集合进行排序,最终将排好序的子集合合并成所要求的排好序的集合。重点:1.分治的实现2.合并的实现分治,就是把整个集合的元素一直除2化分,一直化为到没有两个元素开始合并。图:分治的时候比较简单,一直除2递归就行了,合并的时候为了方便就借助另一个变化的数组来接收交换的数组,合并的时候,两个指标i、j,把值比较小的放入temp数组中,然后放入那个值的那一边的指标自加,继续比较。一直把值合部排完合并为一个数组,然后把temp数组复制回到原来数组就可以进入下一个递归。完全代码由下 阅读全文
posted @ 2012-09-04 10:58 春天的故事 阅读(8326) 评论(5) 推荐(1)
摘要:所谓的快速排序的思想就是,首先把数组的第一个数拿出来做为一个key,在前后分别设置一个i,j做为标识,然后拿这个key对这个数组从后面往前遍历,及j--,直到找到第一个小于这个key的那个数,然后交换这两个值,交换完成后,我们拿着这个key要从i往后遍历了,及i++;一直循环到i=j结束,当这里结束后,我们会发现大于这个key的值都会跑到这个key的后面,不是的话就可能你写错了,小于这个key的就会跑到这个值的前面;然后我们对这个分段的数组再时行递归调用就可以完成整个数组的排序。用图形法表示由下:这样就以key分为了两个段,我们把这两个段再递进去就可以解决问题了实现代码由下: 1 packag 阅读全文
posted @ 2012-09-03 10:03 春天的故事 阅读(39818) 评论(10) 推荐(5)
摘要:最近发现在搞Android的都要懂一点数据结构和算法才能进阶到高手,所以就回去复习了一下基础,为一些公司招聘做题做准备。今天研究了一下最大公约数的求法,在网上也找了不同的解法,现在就想总结一下,拿出来分享给大家,共同 学习首先讲一个什么是公约数,这个问题我们小学都学过,可能有一部分人已经忘记了,所以还是讲一下,假设有两个数a,b,所谓的公约数就是能把a,b整除的最大整数。明白了要求我们就来解决问题,一拿到问题我们都应该都能想到一个方法,就是使用穷举法,从2开始一个个找,到一个两个都能除的就记录起来,一直找到小于min(a,b)结束,记录到的值就是他们的最大公约数代码由下:?代码片段,双击复制0 阅读全文
posted @ 2012-09-03 09:26 春天的故事 阅读(19692) 评论(2) 推荐(3)