
算法
文章平均质量分 74
犀利小屁孩
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
用递归程序求解随机产生一个正整数n(n>=100000),确定n是否是它所有因子之和
## 用递归程序求解随机产生一个正整数n(n>=100000),确定n是否是它所有因子之和(完数) ##了解什么是因子:因子就是所有可以整除这个数的数,不包括这个数自身,例如:6的因子为1,2,3。完数:即某正整数的所有因子之和等于该数,即为完数。例:6的因子为1,2,3且6=1+2+3;即称6为完数。进行分析,要求利用递归实现,递归是一种直接或间接引用自身的定义方法。一个合法的递归定义包括两原创 2017-09-26 11:31:36 · 5421 阅读 · 1 评论 -
分治算法之快速排序
分治算法由两部分组成: 分:递归解决较小的问题(基本情况除外)。 治:然后从子问题的解构建原问题的解。传统上,在正文中至少含有两个递归调用的例程叫作分治算法,而正文中只含有一个递归调用的例程不是分治算法。一般坚持子问题是不相交的(即基本不重叠)。分治算法的经典例子有归并排序和快速排序,它们分别有O(N logN)的最坏情形以及平均情形的时间界。所有有效的分治算法都是把问题分成一些子原创 2017-10-06 21:38:31 · 14065 阅读 · 1 评论 -
插入排序(直接插入排序、折半插入排序和希尔排序)
插入排序是一种简单直观的排序方法,其基本思想是在于每次将一个待排序的记录, 按其关键字大小插入到前面已经排好序的子序列中,直到全部记录插入完成。 插入排序可分为:直接插入排序、折半插入排序和希尔排序。1、直接插入排序 插入排序在实现上通常采用就地排序(空间复杂度为O(1)),因此在从后面的比较过程中,需要反复的把已经排好序的元素逐步向后挪位,为新元素插入空间。pu...原创 2018-06-15 22:33:48 · 3133 阅读 · 0 评论 -
交换排序(冒泡排序和快速排序)
所谓交换,就是根据序列中的两个元素关键字的比较结果来对换这两个记录在序列中的位置,主要的有冒泡和快速排序一、冒泡排序 冒泡基本思想:假设待排序表长为n,从后往前(从前往后)两两比较相邻的元素的值,若为逆序,则交换他们,直到序列比较完,则称为一趟冒泡:结果将最小的元素交换到待排序列的第一个位置。下一趟冒泡时,前一趟确定的最小元素不再参与比较。这样最多做 n-1 趟冒泡就能把所有的...原创 2018-07-26 19:04:05 · 1072 阅读 · 0 评论 -
选择排序(简单选择排序和堆排序)
选择排序的基本思想是:每一趟(例如第i趟)在后面的 n-i+1 个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到第 n-1 趟做完,待排序元素只剩下一个,就不用再选了。这里主要讲简单选择排序和堆排序(重点,面试中问到过)一、简单选择排序 基本思想:假设排序表为 L[1....n] ,第i趟排序即从L[i,,,,n] 中选择关键字最小的元素与 L(i) 交...原创 2018-07-26 22:26:27 · 26188 阅读 · 3 评论 -
内部排序和外部排序小结
一、内部排序的比较:1、从时间复杂度来看:简单选择排序、直接插入排序和冒泡排序的平均复杂度都为 O(n2),并且实现过程也较为简单,但是直接插入排序和冒泡排序在最好的情况下时间复杂度可以达到 O(n),而简单选择排序则与序列的初始状态无关。希尔排序作为插入排序的扩展,对较大规模的排序都可以达到很高的效率,但是目前未得出其精确的渐近时间。堆排序是利用一种称为堆的数据结构,可以在线性时...原创 2018-08-14 16:49:13 · 12531 阅读 · 1 评论 -
归并排序
归并排序“归并”的含义是将两个或者两个以上的有序表组合成一个新的有序表。假设待排序表含有n个记录,则可以看成n个有序的子表,每个子表长度为1,然后两两归并,得到 n/2 个长度为2或者1的有序表;再两两归并,直到合并成一个长度为n的有序表为止,这种排序方法称为 2-路归并排序。递归的2-路归并排序算法是基于分治算法的 ,以O(NlogN)最坏情形时间运行,而所使用的比较次数几乎是最优的...原创 2018-08-13 17:42:00 · 4724 阅读 · 4 评论