
算法
皓月无星
这个作者很懒,什么都没留下…
展开
-
冒泡排序
【1】冒泡排序理论(1)基本概念由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。冒泡排序的时间复杂度为O(n*n)。冒泡排序具有稳定性(2)逻辑分析依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个转载 2014-02-24 14:12:42 · 588 阅读 · 0 评论 -
50个人围成一圈
出圈算法是一类比较典型的算法面试题,它可以很好地考察求职者的编程功底。由于它是一种循环的逻辑,因此它比起一般的基础算法题会更难一些。本例在回答该问题的同时,详细地讲解出圈算法的实现思路。对于出圈的问题,它有一个比较大的困难点,就是它总是重复循环的,它的头就是它的尾巴,所以,出圈问题的循环语句是比较难写的。该题目的圈的元素个数是50个,每次数到3或3的倍数的时候,就把当前元素出圈,并转载 2015-10-11 22:30:35 · 1015 阅读 · 0 评论 -
算法之插入排序
插入排序插入排序故名思议就是把元素插入到已经排好序的位置。 原始数据就好像一副无序的54张扑克牌,我们从第二张牌开始插入,这样一张张的找到牌要插入的位置插入——引自算法导论第2章,2.1节。代码实现 int[] a = {3,1,6,8,9,6,7,2,0,4,5}; public static int[] sort(int[] b){ for (int i = 1;原创 2017-01-25 13:36:31 · 292 阅读 · 0 评论 -
算法之归并排序
我们可以选择使用的算法设计技术有很多。插入排序使用了增量方法:在排序子数组A[0….j-1]后,将单个元素A[j]插入子数组的合适位置,产生排序号的子数组A[0…j].分治法 许多有用的算法在结构上是递归的:为了解决一个给定的问题,算法一次或多次递归地调用自身以解决紧密相关的若干子问题。这些算法典型地遵循分治法的思想:**将原问题分解为几个规模较小但类似于原问题的子问题,递归地求解这些子问题,然后原创 2017-01-25 16:13:11 · 361 阅读 · 0 评论 -
算法里面的渐近记号
渐近记号包括: (1)Θ(theta):紧确界。 相当于”=” (2)O (大欧):上界。 相当于”<=” (3)o(小欧):非紧的上界。 相当于”<” (4)Ω(大omega):下界。 相当于”>=” (5)ω(小omega):非紧的下界。 相当于”>”原创 2017-01-26 10:08:26 · 631 阅读 · 0 评论 -
算法之堆排序
(二叉)堆是一个数组,它可以被近似的看成是完全二叉树。二叉堆可以分为两种形式:最大堆和最小堆。在最大堆中,最大堆性质是指除了根以外的所有结点i都要满足 a[parent(i)] >=a[i],堆中的最大元素存放在根结点中。最小堆的组织方式正好相反。原创 2017-01-25 17:24:26 · 364 阅读 · 0 评论