数据结构
文章平均质量分 81
张呱呱_
C/C++领域小白,努力中..
展开
-
常用排序算法总结(直接插入排序、选择排序、冒泡排序、堆排序、快速排序、希尔排序、归并排序)
本篇文章总结了直接插入排序、选择排序、冒泡排序、堆排序、快速排序、希尔排序、归并排序,包括其实现思路、特点、代码等原创 2024-01-20 16:35:42 · 2604 阅读 · 61 评论 -
[排序算法] 如何解决快速排序特殊情况效率低的问题------三路划分
三路划分顾名思义就是通过处理将数据分为三个部分 [小于特定值的部分 等于特定值的部分 大于特定值的部分] ,这样划分好后,只需要对小于特定值的部分和大于特定值的部分进行递归排序即可,中间的数据就不需要处理了,相比于上述三种方法效率提升很大,并且重复数据越多排序效率越快,当带排序数据全为重复数据时,时间复杂度甚至可以达到O(N)。原创 2024-01-04 14:01:06 · 861 阅读 · 7 评论 -
[排序算法]:归并排序(Merge Sort)(递归与非递归实现详解)
归并排序,是创建在归并操作上的一种有效的排序算法。算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。归并排序思路简单,速度仅次于快速排序,为稳定排序算法,一般用于对总体无序,但是各子项相对有序的数列。原创 2023-12-28 10:44:04 · 1149 阅读 · 15 评论 -
[C/C++]排序算法 快速排序 (递归与非递归)
将数组第一个元素定为关键值,定义两个指针prev和cur,先让prev指向数组的第一个元素,cur指向prev的下一个元素,cur的作用是找比关键值小的元素,若cur所指元素不小于关键值则cur++,直到cur所值元素小于关键值,此时,prev和cur之间的元素都是大于关键值的元素,若prev+1不是cur的话就可以让prev++所指元素与cur所指元素交换了,直到cur指向数组的最后一个元素。此时,关键值又把区间分为了两个区间,右区间只有一个值,没必要入栈排序,只需要将左区间边界1 0入栈。原创 2023-12-27 16:48:42 · 3295 阅读 · 25 评论 -
[C/C++]数据结构 希尔排序
希尔排序也称 “缩小增量排序”,它也是一种插入类排序的方法,在学习希尔排序之前我们首先了解一下直接插入排序.原创 2023-12-25 22:25:32 · 846 阅读 · 5 评论 -
[C/C++]数据结构: 链式二叉树的构建及遍历
二叉树是指树中节点的度不大于2的有序树,它是一种最简单且重要的树,二叉树的递归定义为:二叉树是一颗空树,或者是一颗由一个根节点和两颗互不相交的,分别称为跟的左孩子和右孩子树组成的非空树,其中左子树和右子树都是二叉树.原创 2023-12-24 16:41:48 · 762 阅读 · 2 评论 -
[C/C++]用堆实现TopK算法
用堆实现TopK问题原创 2023-11-28 08:00:00 · 181 阅读 · 4 评论 -
[C/C++]数据结构 堆排序(详细图解)
1.首先将待排序数组建为大堆,此时堆顶元素就为数组最大值了2.交换堆顶和堆尾元素,此时最大元素就到了堆尾,目前数组最大元素就排好了,现在就假设堆里没有当前这个最大元素了,堆头下面的左右子树仍然是大堆,只需要再将堆顶元素向下调整到合适位置,剩下的n-1个元素还是大堆3.堆头堆尾交换,向下调整,如此反复就可排序。原创 2023-11-27 11:32:10 · 801 阅读 · 2 评论 -
[C/C++]数据结构 循环队列
front用于维护队头,指向队头元素位置,back用于维护队尾,总是指向队尾元素的下一个位置,k表示队列实际存数据的长度ps:循环队列的长度是固定的。原创 2023-11-24 18:01:24 · 677 阅读 · 2 评论 -
[C/C++]数据结构 LeetCode:用栈实现队列
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(pushpoppeekempty):实现MyQueueint pop()int peek()truefalsesizeis empty现在我们有两个栈,假设在第一个栈中依次入栈1 2 3 4 5,另一个为空栈现在要出队列的话,应该把1出队,所以需要把除了栈底元素的其他元素出栈并且入到第二个栈里,这时就可以将1出队,但是将数据导入另一个栈时,数据会倒过来如果要再次出队列的话,应该把2出队,就不需要把数据导一次了,直接栈顶出栈即可.原创 2023-11-19 21:05:19 · 685 阅读 · 0 评论 -
[C/C++]数据结构 链表(单向链表,双向链表)
实现无头单向不循环链表和带头双向循环链表的各种常用接口原创 2023-11-18 12:24:36 · 820 阅读 · 0 评论 -
[C/C++]数据结构----顺序表的实现(增删查改)
由于静态顺序表只适用于确定知道需要多少数据的场景,如果静态顺序表的定长数组N定大了,就会造成空间浪费,如果N定小了, 空间又不够用.所以现实中通常都是使用动态顺序表,按需开辟空间.如果传过来的顺序表本身就是空指针,说明顺序表就不存在,不需要进行其他操作.若指针不为空,就把其定长数组指向空,把有效数据个数和容量赋值为0。在进行操作前,先断言一下传过来的指针是否为空,若为空则会在终端提示错误信息,要注意使用asssert(),需要包含头文件assert.h。同样先检查指针是否为空,在遍历顺序表进行打印。原创 2023-11-16 20:19:56 · 388 阅读 · 0 评论 -
[C/C++]数据结构 深入挖掘环形链表问题
在上一篇文章中讲述了如何判断链表是否带环,在观看本片文章时建议先了解一下这篇文章的内容[C/C++]数据结构 链表OJ题:环形链表。本篇文章我们将讲述关于环形链表的几种不同的情况如下,同时我们要解决另一个环形链表问题----找到入环点slow一次走一步fast一次走两步一定会相遇吗?slow一次走一步fast一次走三部一定会相遇吗?slow一次走n步fast一次走m步一定会相遇吗?(m>n>1)原创 2023-11-10 22:53:59 · 463 阅读 · 0 评论