
数据结构和算法自学笔记
文章平均质量分 67
garbage_man
持续进步中!
展开
-
经典排序算法(四)归并排序
自顶而下的归并排序自底向上的归并排序原创 2021-03-25 22:46:38 · 244 阅读 · 0 评论 -
经典排序算法(三)堆排序
堆的概念堆的结构可以分为大根堆和小根堆,是一个完全二叉树,而堆排序是根据堆的这种数据结构设计的一种排序,下面先来看看什么是大根堆和小根堆大根堆和小根堆性质:每个结点的值都大于其左孩子和右孩子结点的值,称之为大根堆;每个结点的值都小于其左孩子和右孩子结点的值,称之为小根堆。下图为大根图的示意图:将完全二叉树的大根堆映射为一维数组(首位置0不用,置空),如下图所示:还有一个基本概念:查找数组中某个数的父结点和左右孩子结点,比如已知索引为i的数,那么父结点:(int)i/2(int)i/2(原创 2021-03-25 21:17:41 · 224 阅读 · 0 评论 -
经典排序算法(二)希尔排序
基本思想先将整个待排序列分割成若干个子序列,这些子序列分别进行插入排序,待整个序列中的记录“基本有序”时,再对全体序列进行依次插入排序。希尔排序的特点:不断缩小间隔增量多遍插入排序算法过程以待排序列{81,94,11,96,12,35,17,95,28,58,41,75,15}为例。首先,我们取间隔增量为5,将序列分为多个子序列,并分别对其进行插入排序:然后,增量减小,再次排序:最后,对“基本有序”的序列,再对全体序列进行依次插入排序(也即间隔增量为1)。图片来源:数据结构原创 2021-03-25 23:14:34 · 333 阅读 · 0 评论 -
经典排序算法(一)插入排序
基本思想插入排序的思想如同它的名字一般:“插入”。我们可以将待排序的无序序列的首元素看作是一组有序序列,序列元素个数为1,其后是一段无序序列。每次取出无序序列的第一个元素,也即有序序列末尾元素的下一个元素,将该元素从后往前,依次和有序序列中的元素比较,直到找到第一个小于该元素值(升序)的元素,将无序元素插入到该有序序列元素的下一个位置。重复上面的过程,直到无序序列中没有元素,序列就被排序完成啦!是不是很简单呀?算法流程例如,有一个待排序的无序序列 { 23, 3, 12, 4 }该序列通过插入排序原创 2021-03-07 22:26:52 · 206 阅读 · 0 评论 -
有意思的全排列递归算法
草稿:我这两天在刷蓝桥杯的试题,其中一个很常见的解题思路就是用全排列解出一个序列的所有排列组合方法。最开始是直接调用C++的next_permutation的全排列函数,这种方式能够解决大多数需要用到全排列解题的算法题,但是有个别题目需要我在生成全排列的时候,进行一些判断,因此不得不手写全排列函数首先我们先来看一下,在蓝桥杯试题中手写的全排列函数是什么样的://全局变量数组int arr[3]={1,2,3};void f(int k){ if(k==3) { //打印数组 for(原创 2021-03-25 20:05:34 · 239 阅读 · 0 评论 -
力扣(LeetCode)-学习-链表-设计链表-C++通过代码
题目来源:链表学习题目描述:设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。在链表类中实现这些功能:get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。addAtHead(val):在链表的第一个元素之前添加一个值为 val 的原创 2021-02-24 12:38:06 · 434 阅读 · 0 评论 -
B站-王卓-数据结构课程-学习笔记
使用C++语言实现B站王卓老师的数据结构公开课课程代码chapter 0chapter 1chapter 2chapter 3chapter 4chapter 5使用说明线性表、链表栈、队列[串、数组和广义表]树[图]我的思维导图笔记-欢迎查看使用说明eg.1://ElemType是数据类型别名,常见的有:typedef int ElemType;eg.2://王卓老师视频中常用的结构体定义方式typedef struct{ Elem原创 2021-02-05 21:20:38 · 3009 阅读 · 7 评论