随笔分类 - 数据结构和算法
感受计算机的计算能力
摘要:深度优先搜索算法:优先向下层进行状态扩展搜索过程:从一个顶点开始,如果该结点下层能够继续扩展,则向下层进行状态扩展,如果下层不能够继续扩展,寻找本层未处理过的结点,继续向下层状态进行扩展用一个经典的例子(走迷宫)来感受下给定一个二维数组 int a[10][10] = {0 , 1 , 0 , 0 ...
阅读全文
摘要:宽度优先搜索,又称为广度优先搜索,简称BFS搜索过程:从初始结点开始,逐层向下扩展,即第n层搜索未完成,不得进入下一层搜索一、初始结点入队,进入循环二、取出队列的第一个元素三、判断该结点是不是目标结点,如果是目标结点,则问题解决,跳出循环四、如果该结点不是目标结点,判断其是否能够扩展,若不能,跳到步...
阅读全文
摘要:堆排序,顾名思义利用堆的性质进行排序。堆都有哪些性质,比如:一堆沙子、一堆泥土二叉堆实际上是一课完全二叉树,同时满足:父结点的键值总是大于或等于(小于或等于)任何一个子结点的键值当父结点的键值总是大于或等于任何一个子结点的键值时称为 最大堆当父结点的键值总是小于或等于任何一个子结点的键值时称为 最小...
阅读全文
摘要:快速排序与归并排序相比,同样是递归,归并算法是递归分解数组之后再合并,而快速排序递归分解数组之前已经进行合并。#includeint W_K_T_S(int a[] , int first , int last) { // 确定基准数并调整相应位置 int te...
阅读全文
摘要:归并排序重在“归并”一词,即先递归分解数组,再合并数组的过程。#includevoid heBin(int a[] , int first , int mid , int last) { // 合并数组的左边和右边 int *temp = new int[last - first ...
阅读全文
摘要:插入排序的思想比较容易理解:使用相应变量将数组分成有序区和无序区,每次取出无序区中的第一个元素,插入到有序区的相应位置即可,随着有序区的长度逐渐增加,无序区长度逐渐减小,最后整个数组成有序状态。#includeint main() { int a[] = {9,6,3,8,5,2,7,4...
阅读全文
摘要:选择排序的思想也比较容易理解,用一个变量控制数组的有序区和无序区,从无序区中挑选一个最小的数放到有序区的末尾,直到把无序区数据挑完为止,相关代码如下:#includevoid Swap(int &a , int &b) { a = a ^ b ; b = a ^ b ; a ...
阅读全文
摘要:冒泡排序思想很容易理解:比较数组中相邻的两个数据,如果前面的数据比后面的数据大,就将两个数据进行交换,每循环一次,最大的数据就会被转移到最后一位。算法一实现:#includevoid Swap(int &a , int &b) { a = a ^ b ; b = a ^ b ; ...
阅读全文
摘要:线性结构、树型结构、图状结构和纯集合结构作为数据的四种结构,树型结构是一类重要的非线性结构。以二叉树为例了解一下树型结构的基本性质及用法:二叉树:每个节点至多有两棵子树,左子树和右子树,次序不可颠倒非空二叉树的第n层至多有2^(n-1)个结点深度为h的二叉树至多有2^h - 1 个结点完美二叉树(满...
阅读全文
摘要:二分查找算法(也称为折半查找算法)效率相对较高,是一种在有序数组中查找某一特定元素的搜索算法。(来源:wikipedia)步骤:第一步:从数组的中间元素开始查找,如果数组中的中间元素等于要查找的元素,查找结束;第二步:如果要查找的元素大于或者小于数组的中间元素,则在数组大于或小于中间元素的那一半中查...
阅读全文

浙公网安备 33010602011771号