![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 75
凯家勇士
这个作者很懒,什么都没留下…
展开
-
数据结构与算法 ---- 斐波那契查找
// 斐波那契查找.cpp #include "stdafx.h" #include <memory> #include <iostream> using namespace std; const int max_size=20;//斐波那契数组的长度 /*构造一个斐波那契数组*/ void Fibonacci(int * F) { F[0]=0; F[1]=1; for(int i=2;i&转载 2020-10-28 17:06:26 · 143 阅读 · 0 评论 -
数据结构与算法 ---- 插值查找
基于折半查找算法,将查找点的选择改进为自适应的,根据关键字在整个有序表中所处的位置,让mid的值更靠近关键字key,这样也就间接减少了比较次数,大大提高了效率。public class InsertionSearch{public static int InsertionSearch(int[] a, int value, int low, int high){ int mid = low+(value-a[low])/(a[high]-a[low])*(high-low); if(a[m.原创 2020-10-28 11:29:21 · 97 阅读 · 0 评论 -
数据结构与算法 ----堆排序
升序#include <stdio.h>#include <stdlib.h>#define MAX 9//单个记录的结构体typedef struct { int key;}SqNote;//记录表的结构体typedef struct { SqNote r[MAX]; int length;}SqList;//将以 r[s]为根结点的子树构成堆,堆中每个根结点的值都比其孩子结点的值大void HeapAdjust(SqList * H,原创 2020-10-23 15:55:45 · 96 阅读 · 0 评论 -
数据结构与算法 ---- 希尔排序
希尔排序和折半插入排序都是对直接插入排序的改进折半插入排序:https://blog.csdn.net/qq_41877840/article/details/109227231希尔排序过程:#include <stdio.h>void ShellSort(int a[], int n);int main(){ int i; int a[10] = {2,6,2,9,4,20,18,7,1,5}; ShellSort(a,10); for(i=0; i<10;.原创 2020-10-23 09:31:30 · 93 阅读 · 0 评论 -
数据结构与算法 ---- 折半插入排序
#include <stdio.h>void BInsertSort(int a[], int n);int main(){ int i; int a[10] = {2,6,2,9,4,0,18,7,1,5}; BInsertSort(a,10); for(i=0; i<10; i++) printf("%d ",a[i]); return 0;}void BInsertSort(int a[], int n){ int low, high,mid,原创 2020-10-22 17:49:33 · 206 阅读 · 0 评论 -
数据结构与算法 ---- 直接插入排序
采用直接插入排序算法将无序表{3,1,7,5,2,4,9,6}进行升序排序的过程为:(1)首先考虑记录 3 ,由于插入排序刚开始,有序表中没有任何记录,所以 3 可以直接添加到有序表中,则有序表和无序表可以如图 1 所示:(2)向有序表中插入记录 1 时,同有序表中记录 3 进行比较,1<3,所以插入到记录 3 的左侧,如图 2 所示:(3)向有序表插入记录 7 时,同有序表中记录 3 进行比较,3<7,所以插入到记录 3 的右侧,如图 3 所示:(4)向有序表中插入记录 5 时,原创 2020-10-22 16:56:28 · 320 阅读 · 0 评论 -
数据结构与算法 ---- 二路归并排序
二路归并排序主要运用了“分治算法”,分治算法就是将一个大的问题划分为n个规模较小而结构相似的子问题。这些子问题解决的方法都是类似的,解决掉这些小的问题之后,归并子问题的结果,就得到了“大”问题的解。二路归并排序主旨是“分解”与“归并”分解:1.将一个数组分成两个数组,分别对两个数组进行排序。2.循环第一步,直到划分出来的“小数组”只包含一个元素,只有一个元素的数组默认为已经排好序。归并:1.将两个有序的数组合并到一个大的数组中。2.从最小的只包含一个元素的数组开始两两合并。此时,合并好的数组转载 2020-09-19 20:08:00 · 419 阅读 · 0 评论 -
数据结构与算法 ---- 快速排序算法
快速排序:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。举个栗子详细的说明一下:下面序列把第一位57作为基准位,用变量把它存起来,因为一会就没了a.把所有比57小的数放在57的左面,把比57大的数放在57的右面b.两边同时进行,左边找大的,右边找小的,把小的放左边,大的放右边,具体操作如下:第一趟:从指针j开始,24小于57,放到左边,把5.转载 2020-09-05 16:15:03 · 177 阅读 · 0 评论 -
数据结构与算法 ---- 选择排序算法
#include<iostream>using namespace std;#define N 10 void Select_Sort(int* arr, int n) //arr为数据数组,n为数组长度{ for (int i = 0; i < n; i++) { int min = i; for (int j = i; j < n; j++) { if (arr[min] > arr[j]) { min = j; } } .转载 2020-09-05 14:52:26 · 91 阅读 · 0 评论 -
数据结构与算法 ---- 冒泡排序算法
冒泡排序是一种简单的排序算法,它也是一种稳定排序算法。其实现原理是重复扫描待排序序列,并比较每一对相邻的元素,当该对元素顺序不正确时进行交换。一直重复这个过程,直到没有任何两个相邻元素可以交换,就表明完成了排序。假设待排序序列为 (5,1,4,2,8),如果采用冒泡排序对其进行升序(由小到大)排序,则整个排序过程如下所示:第一轮排序,此时整个序列中的元素都位于待排序序列,依次扫描每对相邻的元素,并对顺序不正确的元素对交换位置,整个过程如图 1 所示。从图 1 可以看到,经过第一轮冒泡排序,从.原创 2020-09-04 22:08:35 · 1324 阅读 · 0 评论 -
数据结构与算法 ---- 图的广度优先搜索(BFS)和深度优先搜索(DFS)
1.前言和树的遍历类似,图的遍历也是从图中某点出发,然后按照某种方法对图中所有顶点进行访问,且仅访问一次。但是图的遍历相对树而言要更为复杂。因为图中的任意顶点都可能与其他顶点相邻,所以在图的遍历中必须记录已被访问的顶点,避免重复访问。根据搜索路径的不同,我们可以将遍历图的方法分为两种:广度优先搜索和深度优先搜索。2.图的基本概念2.1.无向图和无向图顶点对(u,v)是无序的,即(u,v)和(v,u)是同一条边。常用一对圆括号表示。顶点对<u,v>是有序的,它是指从顶点u到顶点 v转载 2020-08-11 11:49:24 · 777 阅读 · 0 评论 -
数据结构与算法 ---- 哈希表查找
1、哈希查找也叫散列查找,整个散列查找过程大概分两步(1)在存储时通过散列函数计算记录的散列地址,并按此散列地址存储该记录。(2)当查找时,一样通过散列函数计算记录的散列地址,然后访问散列地址的记录。散列函数的构造方法(1)直接定址法取关键字的某个线性函数值为散列地址f(key) = a × key +b需要事先知道关键字的分布情况,适合查找表较小且连续的情况。(2)数字分析法使用关键字的一部分来计算散列存储的位置。 适合处理关键字位数较大的情况。(3)平方取中法假设关键字是1234转载 2020-08-10 15:05:51 · 234 阅读 · 0 评论 -
数据结构与算法 ---- 分块查找
算法简介分块查找又称索引顺序查找,它是顺序查找的一种改进方法。算法思想(1)将n个数据元素"按块有序"划分为m块(m ≤ n)。每一块中的结点不必有序,但块与块之间必须"按块有序";即后一块中任一元素都必须大于前一块中最大的元素;(2)块之间进行二分或者顺序查找,块内进行顺序查找算法流程1、先选取各块中的最大关键字构成一个索引表;2、查找分两个部分:先对索引表进行二分查找或顺序查找,以确定待查记录在哪一块中;3、在已确定的块中用顺序法进行查找。实现代码#include <stdi原创 2020-08-10 11:34:23 · 1424 阅读 · 0 评论 -
数据结构与算法 ---- KMP算法(串模式匹配算法)
KMP算法是对BF算法的改进,利用了在匹配过程中得到的信息跳过不必要的匹配,从而达到一个较高的匹配效率。next数据next数组是用来记录模式串弟j位和主串第i位匹配失败时,模式串需要移到k位继续主串第i位匹配。next数组实际上记录的是模式串每一位前面的最长可匹配后缀和最长可匹配前缀,上图:!![在这里插入图片描述](https://img-blog.csdnimg.cn/20200806092203223.png...原创 2020-08-06 11:28:42 · 318 阅读 · 0 评论 -
数据结构与算法 ---- BF算法(串模式匹配算法)
串的模式匹配算法,通俗地理解,是一种用来判断两个串之间是否具有"主串与子串"关系的算法。主串与子串:如果串 A(如 “shujujiegou”)中包含有串 B(如 “ju”),则称串 A 为主串,串 B 为子串。主串与子串之间的关系可简单理解为一个串 “包含” 另一个串的关系。实现串的模式匹配的算法主要有以下两种:①普通的模式匹配算法(BF);②快速模式匹配算法(KMP);BF算法原理(暴力解法)普通模式匹配算法,其实现过程没有任何技巧,就是简单粗暴地拿一个串同另一个串中的字符一一比对,得到.转载 2020-08-05 17:01:00 · 953 阅读 · 0 评论 -
数据结构与算法 ---- 平衡二叉树(AVL树)
平衡二叉树,又称为 AVL 树。实际上就是遵循以下两个特点的二叉树:①每棵子树中的左子树和右子树的深度差不能超过 1;②二叉树中每棵子树都要求是平衡二叉树; 其实就是在二叉树的基础上,若树中每棵子树都满足其左子树和右子树的深度差都不超过1,则这棵二叉树就是平衡二叉树。平衡因子:每个结点都有其各自的平衡因子,表示的就是其左子树深度同右子树深度的差。平衡二叉树中各结点平衡因子的取值只可能是:0、1 和 -1。如图 1 所示,其中 (a) 的两棵二叉树中由于各个结点的平衡因子数的绝对值都不超过 1.转载 2020-08-05 15:47:09 · 627 阅读 · 0 评论 -
数据结构与算法 ---- 二叉排序树
什么是二叉排序树?二叉排序树要么是空二叉树,要么具有如下特点:(1)二叉排序树中,如果其根结点有左子树,那么左子树上所有结点的值都小于根结点的值;(2)二叉排序树中,如果其根结点有右子树,那么右子树上所有结点的值都大小根结点的值;(3)二叉排序树的左右子树也要求都是二叉排序树;例如,图 1 就是一个二叉排序树:使用二叉排序树查找关键字二叉排序树中查找某关键字时,查找过程类似于次优二叉树,在二叉排序树不为空树的前提下,首先将被查找值同树的根结点进行比较,会有 3 种不同的结果:(1)如果相等转载 2020-08-05 08:20:11 · 495 阅读 · 0 评论 -
数据结构与算法 ---- 二分查找
二分查找,也称折半查找,在某些情况下相比于顺序查找,使用折半查找算法的效率更高。但是该算法的使用的前提是静态查找表中的数据必须是有序的。二分查找(折半查找)算法对静态查找表{5,13,19,21,37,56,64,75,80,88,92}采用折半查找算法查找关键字为 21 的过程为:如上图 1 所示,指针 low 和 high 分别指向查找表的第一个关键字和最后一个关键字,指针 mid 指向处于 low 和 high 指针中间位置的关键字。在查找的过程中每次都同 mid 指向的关键字进行比较,由.转载 2020-08-04 20:39:56 · 851 阅读 · 0 评论