![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 76
呕泡果奶
这个作者很懒,什么都没留下…
展开
-
数据结构与算法 ——二叉排序树
二叉排序树一、概念基础概念:二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:若左子树不空,则左子树上所有结点的值均小于它的根结点的值;若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;左、右子树也分别为二叉排序树;通俗理解:查找过程有点像二分查找,都只需要O(nlogn)。 但是是以“链表”形式存储的二分查找,所以插入过程只需要在末尾添加新元素,而不需要去移...原创 2019-05-11 19:46:15 · 166 阅读 · 0 评论 -
数据结构与算法 ——希尔排序
希尔排序一、概念基础概念:希尔排序(shell sort)这个排序方法又称为缩小增量排序,是1959年D·L·Shell提出来的。该方法的基本思想是:设待排序元素序列有n个元素,首先取一个整数increment(小于n)作为间隔将全部元素分为increment个子序列,所有距离为increment的元素放在同一个子序列中,在每一个子序列中分别实行直接插入排序。然后缩小间隔increment,重...原创 2019-05-01 11:25:49 · 176 阅读 · 0 评论 -
数据结构与算法 ——堆排序
堆排序一、概念基础概念:堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。通俗理解:将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行,便能得到一个有序序列了...原创 2019-05-05 19:43:24 · 178 阅读 · 0 评论 -
数据结构与算法 —— 计数排序
计数排序一、概念基础概念:计数排序是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。 当然这是一种牺牲空间换取时间的做法,而且当O(k)>O(nlog(n))的时候其效率反而不如基于比较的排序(基于比较的排序的时间复杂度在理论上的下限是O(...原创 2019-05-04 14:11:06 · 153 阅读 · 0 评论 -
数据结构与算法 —— 归并排序
归并排序一、概念基础概念:归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分成一些小的问题然后递归求解,而治的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。通俗理解:首先先将一个数组按长度大小进行等分成两个小数组(mid = (left + right) / 2)然后在递归的把这两...原创 2019-05-02 11:34:12 · 107 阅读 · 0 评论 -
数据结构与算法 ——插入排序
插入排序一、概念基础概念:插入排序,从序列中第二个数A开始,将A插入前面已经排序好的序列中,形成一个新的排序好的序列,以此类推到最后一个元素。通俗理解:因为是插入排序,所以必须是要有一个排序好的序列,然后我们执行插入操作,使得插入后的序列依然有序。通俗的理解,就好像在玩扑克牌游戏一样一开始还未发牌的时候,每个人手上都是没有牌的。对应着: 数组一开始还未排序,所以数组是无序的。而从你拿...原创 2019-04-14 12:50:32 · 125 阅读 · 0 评论 -
数据结构与算法 ——括号匹配
括号匹配一、概念基础概念:通过栈,实现括号的匹配判断。二、代码及过程/****括号匹配***/#include <stdio.h>#include <stdlib.h>typedef struct ListNode{ char val; struct ListNode *next;}ListNode;//入栈void push(List...原创 2019-04-21 14:01:30 · 1644 阅读 · 0 评论 -
数据结构与算法 ——二叉树的非递归遍历
二叉树的非递归遍历一、概念基础概念:二叉树的非递归遍历是通过栈来实现的,通过使用栈保存节点信息,实现非递归的遍历二叉树。二、代码及过程/****二叉树非递归实现****/#define maxSize 100#define increment 50#include<stdio.h>#include<stdlib.h>// 二叉树的定义typ...原创 2019-04-21 13:49:31 · 430 阅读 · 0 评论 -
数据结构与算法 ——二分查找
二分查找一、概念基础概念:二分查找又称折半查找,它是一种效率较高的查找方法。二分查找要求:线性表是有序表,即表中结点按关键字有序,并且要用数组作为表的存储结构。不妨设有序表是递增有序的。通俗理解:每次首先找到数组的中间位置(middle),然后把待查找数(target)与middle进行比较。如果查找数target > middle,则将查找范围缩小到middle的右边。(因为数...原创 2019-04-21 13:21:02 · 260 阅读 · 0 评论 -
数据结构与算法 ——选择排序
选择排序一、概念基础概念:选择排序是冒泡排序的改进,它与冒泡排序很相似,都是比较 n-1 轮,每轮都是比较 n–1–i 次,每轮找出一个最大值或最小值。但是冒泡排序,每轮比较中,只要后一个数比当前数值更大,就要交换一次。(就是让最大的那个数不断的与后面的数交换位置,不断的冒上去)交换次数过多。而选择排序,每轮比较只要找出最小数的下标,然后与当前位置进行一次交换即可。交换次数大大减少。通俗...原创 2019-04-13 11:57:20 · 111 阅读 · 0 评论 -
数据结构与算法 ——快速排序
快速排序一、概念基础概念:快速排序,听这个名字就能想到它排序速度比较快方法,是一种分治思想。所谓分治,就是指以一个数为基准,将序列中的其他数往它两边“扔”。以从小到大排序为例,比它小的都“扔”到它的左边,比它大的都“扔”到它的右边,然后左右两边再分别重复这个操作,不停地分,直至分到每一个分区的基准数的左边或者右边都只剩一个数为止。这时排序也就完成了。例子:35,22,17,-20,48,9...原创 2019-04-12 15:03:12 · 149 阅读 · 0 评论