
数据结构
文章平均质量分 80
数据结构&&算法
大数据精读周刊
这个作者很懒,什么都没留下…
展开
-
快速排序(C和Java)
快速排序快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),简称快排,也是一种排序算法。最早由东尼·霍尔提出。在平均状况下,排序 n 个项目要 O(nlogn) 次比较。在最坏状况下则需要 O(n^2) 次比较,但这种状况并不常见。事实上,快速排序 O(nlogn) 通常明显比其他算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地达成。从数列中挑出一个元素,称为“基准”(pivot),重新排序数列,所有比基准值小原创 2021-05-12 10:29:37 · 681 阅读 · 0 评论 -
八大算法总结
文章目录算法稳定性插入排序直接插入排序折半插入排序希尔排序交换排序冒泡排序快速排序选择类排序简单选择排序堆排序归并排序基数排序外部排序算法稳定性选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,冒泡排序、插入排序、归并排序、基数排序是稳定的排序算法插入排序有一个已经 有序 的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、原创 2021-04-23 14:09:54 · 1548 阅读 · 0 评论 -
【算法】KMP经典算法,你真的懂了吗?
有关KMP算法的书籍、帖子、博客铺天盖地,但是你真的能看懂?你知道为什么要有next数组,next数组到底什么意思,又该怎么求next数组,有了next数组之后又该怎样判断模式串和主串是否匹配成功?本文绝对不是讲解KMP算法最细致的一篇文章,但却是为了解决大家的疑惑而写的一篇文章。KMP的概念首先说说什么是KMP算法,说白了,就是不希望用简单的两层循环遍历两个串那样去看能否匹配成功。简单朴素的字符...转载 2018-03-12 15:28:09 · 792 阅读 · 0 评论 -
数据结构-查找-分块查找
也叫分块查找,把线性表分成若干个快.每个快中的元素存储顺序是任意的,但是块块的之间的必须按照关键字的大小排序前一块中的最大的关键字要小于后一块的最小关键字.然后建立索引表如下建立一个索引表,索引表中为每一块都设置–索引项,每一个索引项都包含两个内容:该块的起始地址该块中最大(或最小)的元素...原创 2020-03-15 15:24:34 · 990 阅读 · 0 评论 -
树、森林和二叉树的转换
1、树转换为二叉树由于二叉树是有序的,为了避免混淆,对于无序树,我们约定树中的每个结点的孩子结点按从左到右的顺序进行编号。将树转换成二叉树的步骤是:(1)加线。就是在所有兄弟结点之间加一条连线;(2)抹线。就是对树中的每个结点,只保留他与第一个孩子结点之间的连线,删除它与其它孩子结点之间的连线;(3)旋转。就是以树的根结点为轴心,将整棵树顺时针旋转一定角度,使之结构层次分明。树转换为二叉树的过程示...转载 2018-03-13 18:39:07 · 831 阅读 · 0 评论 -
哈夫曼树及其应用
1、基本概念 a、路径和路径长度若在一棵树中存在着一个结点序列 k1,k2,……,kj, 使得 ki是ki+1 的双亲(1<=i<j),则称此结点序列是从 k1 到 kj 的路径。从 k1 到 kj 所经过的分支数称为这两点之间的路径长度,它等于路径上的结点数减1. b、结点的权和带权路径长度在许多应用中,常常将树中的结点赋予一个有着某种意义的实数,我们称此...转载 2019-01-17 14:22:34 · 1704 阅读 · 0 评论 -
详解又详解KMP中的next和nextval的算法
一、定义KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。二、图解原理以下借用http://www.cnblogs.com/c-cloud/p/3224788.html的部分内容这种算法不太容易理解,网上有很多解释,但读起来都很费劲。直到读到这篇文章,我才真正...转载 2019-07-13 13:16:00 · 2355 阅读 · 0 评论 -
数据结构-堆排序
原创 2020-03-15 15:24:26 · 639 阅读 · 0 评论 -
数据结构-头插法和尾插法
头插法void HeadCreatList(List *L) //头插法建立链表{List *s; //不用像尾插法一样生成一个终端节点。L->next = NULL;for (int i = 0; i < 10; i++) { s = (struct List*) malloc(sizeof(struct List));//s指向新申请的节点 ...原创 2019-05-01 20:41:50 · 45677 阅读 · 12 评论 -
初见红黑树
红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。它是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symmetric binary B-trees)。后来,在1978年被 Leo J. Guibas 和 Robert Sedgewick 修改为如今的“红黑树”。红黑树和AVL树类似,都是在进...翻译 2021-07-22 10:47:52 · 1456 阅读 · 0 评论 -
推荐数据结构可视化网站
数据结构可视化https://visualgo.net/zh原创 2019-06-03 12:19:09 · 3145 阅读 · 0 评论 -
数据结构-基数排序
基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法。...原创 2020-03-12 15:57:13 · 804 阅读 · 0 评论 -
数据结构-归并排序
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。...原创 2020-09-04 16:34:24 · 667 阅读 · 0 评论 -
数据结构-堆排序
图解排序算法(三)之堆排序预备知识堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图:同时,我们对堆中的结点按层进行编号...转载 2020-04-12 10:48:05 · 841 阅读 · 0 评论 -
深入理解C++中public、protected及private用法
这篇文章主要介绍了C++中public、protected及private用法,对于C++面向对象程序设计来说是非常重要的概念,需要的朋友可以参考下初学C++的朋友经常在类中看到public,protected,private以及它们在继承中表示的一些访问范围,很容易搞糊涂。今天本文就来十分分析一下C++中public、protected及private用法。相信对于大家深转载 2017-09-05 19:55:27 · 883 阅读 · 0 评论 -
操作系统页面置换算法(opt,lru,fifo,clock)实现
操作系统页面置换算法(opt,lru,fifo,clock)实现 选择调出页面的算法就称为页面置换算法。好的页面置换算法应有较低的页面更换频率,也就是说,应将以后不会再访问或者以后较长时间内不会再访问的页面先调出。常见的置换算法有以下四种(以下来自操作系统课本)。v1. 最佳置换算法(OPT)最佳(Optimal, OPT)置换算法所选择的被淘汰页面将是转载 2017-10-09 09:19:27 · 16833 阅读 · 5 评论 -
用C语言实现: 输入日期然后计算两天后的日期
题目要求: 输入日期 然后计算两天后的日期#include<stdio.h>int main(){ while(true){ int a[3]; int i; printf("============================\n"); printf("请输入月 日 年的数字\n"); printf("原创 2017-11-03 19:03:54 · 2164 阅读 · 2 评论 -
数据结构-插入排序-直接插入排序
有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后...原创 2017-11-06 11:08:43 · 913 阅读 · 0 评论 -
数据结构排序-交换排序-冒泡排序
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。#include<stdio.h>void ...原创 2017-11-05 14:56:53 · 920 阅读 · 0 评论 -
数据结构排序-交换排序-快速排序
快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。#include<stdio.h>#include<stdlib.h>#define...原创 2017-11-05 14:51:58 · 883 阅读 · 1 评论 -
数据结构-选择排序-简单选择排序
#include<stdio.h>//选择排序 void selectionsort(int *,int);int main(){ int num[7]={1,2,6,5,3,8,9,}; int i=0; printf("排序之前的顺序是\n"); for(i=0;i<7;i++){ printf("%d ",n...原创 2017-12-02 19:37:50 · 1095 阅读 · 0 评论 -
数据结构--链表
链表的种类单链表循环链表双链表链表的操作单链表的节点删除单链表的节点插入双链表节点的删除双链表的节点插入链表的比较原创 2018-01-20 15:57:21 · 853 阅读 · 0 评论 -
数据结构-折半插入排序
折半插入排序是一个基于有序的序列每次都是在一个已经有序的序列中插入一个新的序列.时间复杂度: 最好为O(n log2 n),最差O(n^2),平均最差O(n^2) 空间复杂度 是O(1)...原创 2020-01-16 17:53:27 · 1261 阅读 · 0 评论 -
数据结构-希尔排序
希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L.Shell于1959年提出而得名。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,...原创 2020-01-16 17:53:07 · 640 阅读 · 0 评论 -
判读一句话里面是否有指定的字符串
1. 字符串中必须仅有P, A, T这三种字符,不可以包含其它字符;2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;3. 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a, b, c 均或者是空字符串,或者是仅由字母 A 组成的字符串。现在就请你为PAT写一个自动裁判程序,判定哪些字符串是原创 2017-07-04 20:29:52 · 1217 阅读 · 0 评论