![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
老干妈就泡面
这个作者很懒,什么都没留下…
展开
-
快速排序(Quick Sort)及其优化 —— C++
时间复杂度:O(n*logn)原创 2019-07-25 10:57:26 · 873 阅读 · 0 评论 -
PTA 建立学生信息链表(线性表之链表描述) —— C
本题要求实现一个将输入的学生成绩组织成单向链表的简单函数。 函数接口定义: void input(); 该函数利用scanf从输入中获取学生的信息,并将其组织成单向链表。链表节点结构定义如下: struct stud_node { int num; /*学号*/ char name[20]; /*姓名*/ in...原创 2019-09-12 20:45:46 · 1017 阅读 · 0 评论 -
二分搜索树(Binary Search Tree) 笔记总结—— C++
查找问题的基础:二分查找法(对于有序数列,才能用二分查找法) 二分查找法:对于一个有序数组,我们想查找某一元素,先查看数组中间元素 v ,若 v 等于我们想查找的元素,那么我们找到了,否则的话,整个数组就被 v 这个元素分成了两个部分,小于 v 和大于 v 的部分,如果我们查找的元素是比 v 小的,我们就在小于 v 的这部分继续查找,要是比 v 大,就在大于 v 的部分查找。 二分查找法时间复杂度...原创 2019-07-26 10:21:34 · 521 阅读 · 0 评论 -
索引堆(Index Heap)及其优化 —— C++
引入索引堆的原因:堆构建前后数组元素位置发生改变,其具有一定的局限性: 1.元素是非常复杂的结构,交换消耗本身是巨大的,比如每一个元素都是一篇十万字以上的文章,对于这些大型的字符串,让它们来回交换,会产生大量的性能上的消耗 2.由于整个元素在数组中的位置发生改变,使得当我们的堆建成之后,很难所引导到它,以至于我们很难去改变它,比如说我们这些元素表示的是一个一个的系统任务,初始的时候,数值的索引是系...原创 2019-07-25 22:18:55 · 904 阅读 · 2 评论 -
堆和堆排序(Heap Sort)以及堆排序的优化 —— C++
优先队列:出队顺序和入队顺序无关,和优先级相关 比如在医院看病,急诊病人优先,再比如在操作系统中执行任务,操作系统将动态的选择每一次优先级最高的任务进行执行 为什么选择优先队列:例如在1000000个元素中选出前一百名,在 n 个元素中选出前 m 个元素,排序算法的算法复杂度是O(nlog n)级别的,而使用优先队列,可以将其算法复杂度降低到O(nlog m)级别 优先队列的主要操作:入队,出队(...原创 2019-07-25 14:26:14 · 1209 阅读 · 0 评论 -
选择排序(Selection Sort) —— C++
时间复杂度:O(n^2) 要求:将数组元素从小到大排序 8 6 7 4 2 1 寻找当前数组最小值 1 当前数组第一位是 8 ,和 1 交换位置 1 6 7 4 2 8 寻找剩余数组中最小的元素 2,放到当前的第一个位置,即 6 所在位置 1 2 7 4 6 8 …(以此规律完成排序) 代码实现: template<typename T> void selectionSort(T ...原创 2019-07-24 13:48:02 · 374 阅读 · 0 评论 -
插入排序(Insertion Sort)及其优化 —— C++
优化方法:交换—>先赋值,最后进行交换 可优化原因:不再频繁使用交换函数,赋值比交换函数运行速度更快 在数组本身基本有序的条件下,插入排序效率非常高的原因:可以提前终止内层循环 8 6 4 5 9 1 第 0 位元素不用考虑,从第 1 位开始与前面数组比较 8 6 4 5 9 1 **6 先将 6 复制一份,将 6 与 8 比较,6 比 8 小,将 8 放在 6 的位置 8 8 4 5 9...原创 2019-07-24 14:50:56 · 759 阅读 · 0 评论 -
归并排序(Merge Sort)及其优化 —— C++
时间复杂度:O(n*logn) 原理:将数组分为若干子数组,各子数组分别排序,最后归并排序(即将两个已经排好序的数组,比较头位元素谁更小,将小的元素放到放到数组前面) 简化版:(将数组二分成若干组,分别进行排序,最后逐步归并) 代码: // 将arr[l...mid]和arr[mid+1...r]两部分进行归并 template<typename T> void merge(T ...原创 2019-07-25 09:14:30 · 1022 阅读 · 0 评论 -
PTA 学生成绩链表处理(线性表之链表描述) —— C
本题要求实现两个函数,一个将输入的学生成绩组织成单向链表;另一个将成绩低于某分数线的学生结点从链表中删除。 函数接口定义: struct stud_node *createlist(); struct stud_node *deletelist( struct stud_node *head, int min_score ); 函数createlist利用scanf从输入中获取学生的信息,将其...原创 2019-09-13 10:55:07 · 949 阅读 · 0 评论