
数据结构与算法
数据结构与算法系列博客
warybee
有的鱼是永远关不住的,因为它们属于天空
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数据结构与算法(12)基数排序算法
1、基数排序介绍 基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或 bin sort,顾 名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用 基数排序法是属于稳定性的排序,基数排序法的是效率高的稳定性排序法 基数排序(Radix Sort)是桶排序的扩展 基数排序是使用空间换时间的经典算法 基数排序是 1887 年赫尔曼·何乐礼发明的。它是这样实现的:将整数按位数切割成不同原创 2021-02-22 17:14:11 · 260 阅读 · 0 评论 -
数据结构与算法系列(9)希尔排序算法
排序原理 希尔排序(Shellsort),也称递减增量排序算法,是插入排序的一种更高效的改进版本。 希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率 但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位 希尔排序是把记录按下标的一定增量分组, 对每组使用直接插入排序算法排序; 随着增量逐渐减少, 每组包含的关键词越来越多, 当增量减至 1 时, 整个文件恰被分成一组, 算法便终止。 我们来看下希尔排序的基本步骤,在原创 2020-12-24 20:31:06 · 201 阅读 · 1 评论 -
数据结构与算法系列(5)数据结构之栈详解
本文目录1、栈介绍2、基于数组实现出栈、入栈逻辑 1、栈介绍 栈是一个先入后出(FILO-First In Last Out)的有序列表。栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。 允许插入和删除的一端, 为变化的一端, 称为栈顶(Top), 另一端为固定的一端, 称为栈底(Bottom)。 下图是出栈和入栈逻辑示意图: 2、基于数组实现出栈、入栈逻辑 以下代码是基于数组,使用java语言,实现出栈、入栈逻辑。 class ArrayStack{原创 2020-12-15 13:48:20 · 239 阅读 · 0 评论 -
数据结构与算法系列(4)数据结构之双向链表详解
数据结构之双向链表详解上一篇单向链表1、 双向链表介绍2、双向链表增删改思路2.1 在链表的最后添加节点2.3 将节点插入到指定的位置2.3 删除节点2.4、节点更新3、代码实现 上一篇单向链表 1、 双向链表介绍 上一节介绍了单向链表,理解了单向链表,双向链表就简单对了。双向链表每个节点有两个连接:一个指向前一个节点,(当此“连接”为第一个“连接”时,指向空值或者空列表);而另一个指向下一个节点。 下图是一个带有头节点的双向链表逻辑示意图: 提示:头结点是为了操作的统一与方便而设立的,放在第一个元素结原创 2020-12-14 21:14:31 · 240 阅读 · 0 评论 -
数据结构与算法系列(3)数据结构之单向链表详解
数据结构之单向链表详解1、什么是链表2、单向链表增删改查思路2.1、在链表的最后添加节点2.2、将节点插入到指定的位置2.3、节点删除2.4、节点更新3、代码实现 1、什么是链表 链表是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。由于不必按照顺序存储数据,链表在插入的时候,比顺序存储结构的数组快得多。相比数组(顺序存储结构),链表(链式存储结构)可以充分利用计算机内存空间,实现灵活的内存动态管理。 下图是一个单链表示意图,通过下图能更好的理解上面的一原创 2020-12-09 14:37:13 · 163 阅读 · 0 评论 -
数据结构与算法系列(2)数据结构之队列详解
1、概述 队列(Queue)是一种常用的数据结构,队列(Queue)是一个有序列表,可以用数组或是链表来实现。队列(Queue)遵循先入先出的原则。即:先存入队列的数据,要先取出,后存入的要后取出。队列只允许在后端(tail)进行插入操作,在前端(head)进行删除操作。 2、使用数组实现队列 通过下面的动态图片 ...原创 2020-12-08 21:29:51 · 219 阅读 · 0 评论 -
数据结构与算法系列(1)稀疏数组详解
数据结构(1)稀疏数组原创 2020-12-07 21:31:59 · 643 阅读 · 0 评论 -
二分查找(Binary Search)算法
本文目录1、实现原理2、代码实现3、二分查找常见的变体3.1、查找第一个值等于给定值的元素3.2、查找最后一个值等于给定元素3.3、查找最后一个大于等于给定值的元素3.4、查找最后一个小于于等于给定值的元素4、二分查找算法的局限性 1、实现原理 二分查找针对的是一个有序的数据集合,每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。 如下是二...原创 2019-12-23 18:49:58 · 461 阅读 · 0 评论 -
数据结构与算法系列(10)快速排序算法详解
如果要排序数组(`int[p--r]`)中下标从 p 到 r 之间的一组数据,我们选择 p 到 r 之间的任意一个数据作为 pivot(分区点),遍历 `p 到 r` 之间的数据,**将小于 `pivot` 的放到左边**,**将大于 `pivot` 的放到右边**,`将 pivot 放到中间`。经过这一步骤之后,数组 p 到 r 之间的数据就被分成了三个部分,前面 p 到 q-1 之间都是小于 pivot 的,中间是 pivot,后面的 q+1 到 r 之间是大于 `pivot` 的。然后再使用递归,排原创 2019-12-08 19:08:58 · 298 阅读 · 0 评论 -
数据结构与算法(11)归并排序算法
1、排序原理 归并排序使用的是分治思想(Divide and Conquer),分治,顾名思义,就是分而治之,是将一个大问题分解成小的子问题来解决。小的子问题解决了,大问题也就解决了。 归并排序的核心思想是:如果要排序一个数组,先把数组从中间分成前后两部分,然后再分解,直到每个子序对中只剩一个元素,最后通过递归,层层合并。 2、代码实现 public static int[] mergeSort...原创 2019-12-08 11:24:25 · 237 阅读 · 0 评论 -
数据结构与算法系列(7)选择排序算法
1、排序原理 选择排序算法的实现思路类似插入排序,也分已排序区间和未排序区间。选择排序每次会从未排序区间中找到最小(大)的元素,将其放到已排序区间的末尾。 通过一张动态图,来直观感受一下,要排序的数组为:[4,5,6,1,3,2],正序排序 伪代码实现: 循环(元素个数-1)次 把第一个没有排序过的元素设置为最小值 循环(每个没有排序过的元素) 如果元素 < 现在的最...原创 2019-12-06 21:42:32 · 174 阅读 · 0 评论 -
数据结构与算法系列(8)插入排序算法
1、排序原理 插入排序是将数组中的数据分为两个区间,已排序区间和未排序区间,其中已排序区间初始只有一个元素,就是数组的第一个元素。插入算法的核心思想是取未排序区间中的元素,在已排序区间中找到合适的插入位置将其插入,并保证已排序区间数据一直有序。重复这个过程,直到未排序区间中元素为空,算法结束。通过一张动态图,来直观感受一下,要排序的数组为:[4,5,6,1,3,2],正序排序 1.1、排序过程详解...原创 2019-12-06 20:45:50 · 274 阅读 · 0 评论 -
数据结构与算法系列(6)冒泡排序算法
1、冒泡排序原理 冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。如果不满足就让它俩互换。一次冒泡会让至少一个元素移动到它应该在的位置,重复 n 次,就完成了 n 个数据的排序工作。 如果我们要对一组数据 4,5,6,3,2,1从小到到大进行排序,第一次冒泡操作的详细过程就是这样: 4和5比较,4小于5,不进行位置交换,结果:[4,5,6,3,2...原创 2019-12-06 15:15:03 · 1271 阅读 · 0 评论