数据结构
文章平均质量分 51
Cascatrix
Cascatrix Official Acount
展开
-
快速排序(Quick sorting)(C++)
一. 快速排序(Quick sorting)快速排序(Quick sorting) 与归并排序类似,同样是一种分而治之的排序算法,其过程可分为以下三个步骤:分离(Partition):在分离之前应当从数组中选择一个元素满足该元素之前的部分和之后的部分都占整个数组的一半,这样选择的元素称为pivot,然后在分离之前,将pivot放置在首位。如下图所示:递归(Recursion):在每个部分内利用递归的方法分别进行排序,具体实现方法如下图所示:合并(Conquer):最后将原创 2021-01-29 16:26:05 · 267 阅读 · 0 评论 -
归并排序(Merge sorting)(C++)
一. 归并排序(Merge sorting)归并排序(Merge sorting) 是一种将数据分而治之(divide and conquer)的算法,其实现过程如下:将数据分为两部分(Divides the list into halves);每一半各自进行排序(Sort each halve separately);将排序结果汇总(Then merge the sorted halves into one sorted array)。最差的情况如下图所示:由图分析可知归并排序是一种稳原创 2021-01-29 15:56:42 · 320 阅读 · 0 评论 -
冒泡排序(Bubble sorting)(C++)
一. 冒泡排序(Bubble sorting)冒泡排序(Bubble sorting) 的实现是通过比较数组内的相邻元素,并按大小交换位置,每次比较都要遍历全部的元素,从而依次确定最大(或最小)在一端,其具体实现过程如下图所示:由图分析可知冒泡排序是一种稳定的排序算法,在最糟糕情况下的时间复杂度为O(n2),平均时间复杂度为O(n2)。二. C++ 代码#include <iostream>using namespace std;void BubbleSort(in原创 2021-01-28 22:47:50 · 229 阅读 · 0 评论 -
插入排序(Insertion sorting)(C++)
一. 插入排序(Insertion sorting)插入排序(Insertion sorting) 类似选择排序,将数组分为两类,排序完成和排序未完成的,如图蓝色部分为排序完成的部分,白色为排序未完成的部分。每次排序过程将其中一个元素取出,与剩余元素比较,确定该元素的位置,如此遍历所有元素。由图分析可知插入排序在最糟糕情况下的时间复杂度为O(n2),平均时间复杂度为O(n2)。二. C++ 代码#include <iostream>using namespace std;vo原创 2021-01-28 22:32:54 · 230 阅读 · 0 评论 -
选择排序(Selection sorting)(C++)
一. 选择排序(Selection sorting)选择排序(Selection sorting) 是将数组内的数从依次比较,从中选出最小(或最大)的数与第一位数交换位置,放在首位,然后从下一位继续如此比较循环反复,知道得到正确的排序为止。由排序方法可知该过程将数组分为两部分,排序完成部分和排序未完成部分,如图,蓝色为排序完成部分,白色为未完成部分。由图分析可知选择排序是一种不稳定的排序算法,其时间复杂度最快为O(n),但绝大多数情况为最慢的情况,时间复杂度为O(n^2)。二. C++ 代码#i原创 2021-01-28 22:06:27 · 691 阅读 · 0 评论 -
队列(Queue)实现(C++)
一. 队列(Queue)队列(queue) 和堆栈相似,是一种可以存取的数据结构,不同的是队列的存取是在两个不同的方向进行的,因此其主要特征是先进先出(First-in-first-out,FIFO)头指针(front) 指向队列的第一个位置,数据的输出端尾指针(rear) 指向队列的最后一个位置,数据的进入端队列也可分为静态队列(Static Queue)和动态队列(Dynamic Queue)两类:Static Queue: 队列的大小固定,可以用数组实现;Dynamic Queue:原创 2021-01-28 18:26:50 · 9535 阅读 · 1 评论 -
堆栈(Stack)实现(C++)
一. 堆栈(Stack)堆栈(Stack) 是一种可以存取的数据结构,其主要特征是先进后出(Last-in-first-out, LIFO)栈顶(Top) 是最后入栈的数据堆栈可分为静态堆栈(Static Stack)和动态堆栈(Dynamic Stack)两类:Static Stack: 栈的大小固定,可以用数组实现;Dynamic Stack: 栈的大小随需要改变,可以用链表实现二. 基本操作(Basic Operation)入栈(Push):Equivalent to an in原创 2021-01-28 17:23:19 · 5403 阅读 · 2 评论 -
链表(Linked-List)实现(C++)
一. 链表(Linked-List):链表(linked list) :由一系列节点构成,每个节点满足以下条件:包含一段数据(任意类型);指向链表的下一个节点表头(Head):指向第一个节点最后一个节点指向 NULL定义一个链表可以定义两种结构体:Node 和 List二. 基本操作(Basic Operation):新建一个链表(constructor):List(void);摧毁一个链表(destructor):~List(void);判断链表是否为空(determine w原创 2021-01-28 12:35:58 · 1676 阅读 · 0 评论