数据结构与算法
文章平均质量分 53
Veaxen
这个作者很懒,什么都没留下…
展开
-
二分查找算法的原理及一个实用小技巧
二分查找算法是在有序数组中用到的较为频繁的一种算法,在未接触二分查找算法时,最通用的一种做法是,对数组进行遍历,跟每个元素进行比较,其时间复杂度为O(n),但二分查找算法则更优,因为其查找时间复杂度为O(log2 n),比如数组{0,1,2,3,4,5,6,7,8 9},查找元素6,用二分查找的算法执行的话,其顺序为: 1.第一步查找中间元素,即4,由于4 2.寻找{5,6,7原创 2016-05-28 01:04:26 · 5868 阅读 · 1 评论 -
排序算法总结(一)
1、排序算法的分类在本文的开始,我们先来看看排序是如何分类的。1.1、稳定排序和非稳定排序在待排序的记录中,如果存在多个关键码相同的记录,经过排序后,这些记录的相对次序依然保持不变,即排序后这两个相同的对象具有与排序前相同的顺序,那么就称相应的排序算法是稳定的,否则就是不稳定的。1.2、内排序和外排序所谓的内排序是指所有的数据已经读入内存,在内存中进行排序的算法。排序过程中不需要对磁盘进行读写。同时原创 2017-05-13 13:16:25 · 492 阅读 · 0 评论 -
快速排序的递归和非递归实现
首先参考《递归如何转换为非递归》,然后根据文中的思想将递归快排转换为非递归快排。先来看看递归快速排序的代码:/*以递归的方式实现快速排序*/void quick_sort(int array[],int left,int right){ if(left>=right) return ; int key = array[left]; int low = le原创 2017-05-13 13:15:11 · 422 阅读 · 0 评论 -
数据结构之树
树的定义(这是一种递归定义):树是由n个节点组成的有限集合T,其中n>=0。特别的,若n=0,称为空树,如果n>0则T应满足的条件是: 1. 有一个特定的称为根(root)的节点,它只有直接后继,没有前驱。 2. 除根以外的其它节点被划分为m个互不相交的有限集合T1,T2,…,Tm,其中m>=0,每个集合又是一颗树,并且称为根的子树。每棵子树的根节点有且仅有一个直接前驱,但可以有0个或多个直接后转载 2017-05-13 13:14:31 · 518 阅读 · 0 评论 -
经典算法之八皇后问题
问题描述: 八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。下面利用回溯法(递归写法),来求出所有可能的结果:#include <conio.h>#include <iostream>#include <cmath>#include <stdlib转载 2017-05-13 13:13:39 · 605 阅读 · 0 评论 -
经典算法之传染病问题
问题描述:一个坐标表格,每个单元表格就代表一个地方有传染病病毒存在。 无病毒的地方用0标记,有病毒的地方用1标记。(为了方便表示边界,我在周围加了个-1的墙壁) 而我们实际常常研究的是估算受感染程度,该程序需要在接收一个坐标为输入后以该点为中心向周围的8个方向进行递归拓展,检查周围区域是否被感染。得到的菌群用2来标记。类似的应用有图像处理上的ps可以用这个算法找出某种颜色值的分布。然后要考虑到边转载 2017-05-13 13:12:30 · 3945 阅读 · 0 评论 -
汉诺塔问题
汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。问应该如何操作?分析如果是初次接触类似的问题,乍看之下肯定会感觉原创 2017-05-13 13:11:53 · 890 阅读 · 0 评论 -
递归如何转换为非递归
递归算法实际上是一种分而治之的方法,它把复杂问题分解为简单问题来求解。递归的特点包括:递归过程简洁、易编、易懂;递归过程效率低、重复计算多。考虑递归的执行效率低,可以尝试将递归过程转换为非递归过程。本文就是来探讨怎么转换的。将递归算法转换为非递归算法有两种方法,一种是直接求值(迭代/循环),不需要回溯;另一种是不能直接求值,需要回溯。前者使用一些变量保存中间结果,称为直接转换法;后者使用栈保存中间结原创 2017-04-08 00:01:53 · 2191 阅读 · 0 评论 -
归并排序
归并排序是分治思想的一种应用,把复杂大型的问题切分成若干个小问题,在进行一一解决然后进行合并,最后把复杂的问题解决。转载 2016-09-10 02:39:24 · 349 阅读 · 0 评论 -
STL排序算法
以前一直不重视排序算法,因为之前很少有应用场景,最近在面试过程中发现排序算法经常会被问到,有时在一些笔试或者面试题目中需要用到排序算法来解决问题,如果每次都自己手写排序,那么要相当耗时,而且我也不一定在短时间内写出没有错误的排序算法,这个时候STL里提供的排序算法就十分重要了,而且STL中的排序算法都是各个大神优化的成果,我不认为我可以在没有研究的情况下写出能与STL里提供的算法相媲美的排序。总而言转载 2017-05-13 13:20:26 · 663 阅读 · 0 评论