
数据结构与算法
老干妈就泡面
这个作者很懒,什么都没留下…
展开
-
快速排序(Quick Sort)及其优化 —— C++
时间复杂度:O(n*logn)原创 2019-07-25 10:57:26 · 948 阅读 · 0 评论 -
PTA 建立学生信息链表(线性表之链表描述) —— C
本题要求实现一个将输入的学生成绩组织成单向链表的简单函数。函数接口定义:void input();该函数利用scanf从输入中获取学生的信息,并将其组织成单向链表。链表节点结构定义如下:struct stud_node { int num; /*学号*/ char name[20]; /*姓名*/ in...原创 2019-09-12 20:45:46 · 1101 阅读 · 0 评论 -
二分搜索树(Binary Search Tree) 笔记总结—— C++
查找问题的基础:二分查找法(对于有序数列,才能用二分查找法)二分查找法:对于一个有序数组,我们想查找某一元素,先查看数组中间元素 v ,若 v 等于我们想查找的元素,那么我们找到了,否则的话,整个数组就被 v 这个元素分成了两个部分,小于 v 和大于 v 的部分,如果我们查找的元素是比 v 小的,我们就在小于 v 的这部分继续查找,要是比 v 大,就在大于 v 的部分查找。二分查找法时间复杂度...原创 2019-07-26 10:21:34 · 565 阅读 · 0 评论 -
索引堆(Index Heap)及其优化 —— C++
引入索引堆的原因:堆构建前后数组元素位置发生改变,其具有一定的局限性:1.元素是非常复杂的结构,交换消耗本身是巨大的,比如每一个元素都是一篇十万字以上的文章,对于这些大型的字符串,让它们来回交换,会产生大量的性能上的消耗2.由于整个元素在数组中的位置发生改变,使得当我们的堆建成之后,很难所引导到它,以至于我们很难去改变它,比如说我们这些元素表示的是一个一个的系统任务,初始的时候,数值的索引是系...原创 2019-07-25 22:18:55 · 976 阅读 · 2 评论 -
堆和堆排序(Heap Sort)以及堆排序的优化 —— C++
优先队列:出队顺序和入队顺序无关,和优先级相关比如在医院看病,急诊病人优先,再比如在操作系统中执行任务,操作系统将动态的选择每一次优先级最高的任务进行执行为什么选择优先队列:例如在1000000个元素中选出前一百名,在 n 个元素中选出前 m 个元素,排序算法的算法复杂度是O(nlog n)级别的,而使用优先队列,可以将其算法复杂度降低到O(nlog m)级别优先队列的主要操作:入队,出队(...原创 2019-07-25 14:26:14 · 1260 阅读 · 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 · 421 阅读 · 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 · 821 阅读 · 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 · 1068 阅读 · 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 · 977 阅读 · 0 评论