![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法基础
Lucky_Go
这个作者很懒,什么都没留下…
展开
-
排序算法(1):简单选择排序
基本思想 简单选择排序是一种简单并且非常直观的排序算法。它的思想是每次从未排序序列中找到最小值,然后将其放到已排序序列的末尾,重复这一过程直到不存在未排序元素。算法流程以长度为 nnn 的数组为例:第一趟排序:从第一个元素开始遍历整个数组,找出最小值,和第一个元素交换;第二趟排序:找出第二个元素到第 nnn 个元素中的最小值,和第二个元素交换;第三趟排序:找出第三个元素到...原创 2019-08-21 11:30:02 · 2054 阅读 · 1 评论 -
二分查找的递归和迭代实现
基本思想 在一个数组中查找某个特定元素的时候,直观的方法就是从头开始向后进行遍历。但是,如果数组一开始就是有序的,那么我们就可以有更快的查找方式——二分查找。二分查找是二分法思想的一个典型应用,具体来说,对于一个有序数组,我们如果要查找一个元素,那么首先用数组的中间元素将数组切分为两部分,若带查找元素大于中间元素则在前一部分找,小于则在后一部分找……以此不断地切分数组搜索待查找元素。 二分...原创 2019-09-16 21:22:57 · 656 阅读 · 0 评论 -
十大排序算法总结(附java实现)
定义 排序 是计算机内部经常进行的一项操作,目的是将一组无序的序列调整为一组有序的序列。Excel中将数据按照名称进行升序降序排列就是一种常见的排序操作。相关概念时间复杂度:反映操作次数(计算量)随数据长度的变化规律,是数据规模的函数,用O(⋅)O(·)O(⋅)表示。空间复杂度:用来度量执行算法所需的存储空间随数据规模的变化情况,也用O(⋅)O(·)O(⋅)表示。稳定性:对于两个相等...原创 2019-09-12 21:05:38 · 159 阅读 · 0 评论 -
排序算法(8):计数排序/桶排序/基数排序
计数排序、桶排序和基数排序是三个线性时间非比较类排序算法,他们相同的特点在于不是通过比较元素的大小来确定他们的排列顺序,并且均能够达到线性时间复杂度O(n+k)O(n+k)O(n+k),之所以这样根本在于他们都使用了额外的桶(bucket, 不是某种特定数据结构,只是一种叫法)来辅助存储数据。但是这三种排序算法的应用场景都比较有限,下面具体来讲一下这三种排序算法。计数排序基本思想 以一...原创 2019-09-12 21:02:11 · 330 阅读 · 0 评论 -
排序算法(7):堆排序
基本思想 堆排序是基于堆这种数据结构的一种排序方法。首先将待排序的数组(或序列)构造成完全二叉树,然后利用完全二叉树中父节点和孩子节点之间的关系,每次从当前二叉树中找出最大节点并将其移出未排序部分,达到排序的目的。首先介绍一下一些相关概念:完全二叉树:对于一棵深度为 hhh 的二叉树,如果除了最后一层外,其他每层的节点数都达到最大,且第 hhh 层的节点都连续集中在最左边,那么这就是一棵...原创 2019-09-12 20:58:51 · 557 阅读 · 0 评论 -
排序算法(6):快速排序
基本思想 快速排序也是一种基于分治的排序算法,它的主要思想是将一个数组切分成两部分,将这两部分独立的进行排序。和归并排序不同的是:归并排序首先对两部分子数组进行排序,在子数组各自有序之后将他们合并为一个完整的有序数组;而快速排序在两个子数组均有序的时候整个数组也已经有序了。 快速排序的关键在于对数组的切分,这个过程通过一个切分元素(或者叫基准)来实现的,切分将数组划分为两部分,满足前一部分...原创 2019-09-12 20:57:15 · 518 阅读 · 0 评论 -
排序算法(5):归并排序
基本思想 用一句话描述归并排序就是:将两个有序的数组归并(Merge)为一个有序数组。归并排序是分治思想的一种典型应用。归并排序可以通过自顶向下的方式实现,也可以通过自底向上的方式实现。自顶向下自顶向下的归并排序首先将数组分成两个子数组,分别递归调用这两部分进行单独排序,最后合并子数组。下面的动图演示就是自顶向下的归并排序。自底向上和自顶向下的归并排序化整为零的思路不同,自底向...原创 2019-09-12 20:54:40 · 249 阅读 · 0 评论 -
排序算法(4):希尔排序
基本思想h有序数组一个数组中任意间隔为 hhh 的元素都是有序的,那这个数组就是h有序数组。如下图所示这个数组就是一个 hhh 有序数组,其中 h=4h=4h=4。可以看到,虽然整个数组是乱序的,但任意相隔 h=4h=4h=4 的元素都是有序的。希尔排序希尔排序的思想就是,首先让数组 hhh 有序,然后不断减小 hhh 的值。试想一下,当 h=1h=1h=1 的时候,数组 hh...原创 2019-09-12 20:52:41 · 410 阅读 · 0 评论 -
排序算法(3):插入排序
基本思想 在玩扑克牌的时候,每当抽到一张牌的时候,就将其插入到手中已经有序的拍中,插入排序和这种整理扑克牌的思路很像。每遍历到一个新的元素就将其插入到它之前的所有元素中的合适位置,保证其之前的序列有序。算法流程第一趟排序:将第二个元素插入到前一个元素的合适位置;第二趟排序:将第三个元素插入到前两个元素中的正确位置;第三趟排序:将第四个元素插入到前三个元素中的正确位置;……第 nn...原创 2019-09-12 20:49:22 · 189 阅读 · 0 评论 -
排序算法(2):冒泡排序
基本思想 冒泡排序是基于比较和交换的排序算法。它重复地比较两两元素,如果他们顺序错误就进行交换,直到没有交换发生表明数组已经有序。 之所以称为冒泡排序是因为在比较排序过程中,较小的元素会慢慢的前移,类似于碳酸饮料中二氧化碳的气泡上浮过程。算法流程比较相邻元素,如果第一个元素比第二个元素大则交换它们的位置;从开始第一对到最后一对的每一对相邻元素做步骤1同样的工作,这一步之后最后一个元...原创 2019-08-21 20:04:32 · 430 阅读 · 0 评论 -
二叉查找树的基本实现
定义数组和链表数组和链表是两种使用频率非常高的数据结构,但两者的结构也决定了他们的应用场景。数组的元素在内存中的地址是连续的,而构成链表的结点在内存中的地址不连续,数组的元素可以通过索引进行随机访问,链表则需要遍历访问,因此数组的查询速度比链表快;另一方面链表的长度可变,插入和删除元素的效率非常高,因此在增删操作较多的情况下链表性能比数组好。二叉查找树二叉查找树(Binary Se...原创 2019-09-26 16:53:33 · 485 阅读 · 0 评论