![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 82
AsiaSun.
日拱一卒
展开
-
《算法图解》---笔记
第1章 算法简介二分查找,每次都会减少一半,对于n个元素,使用二分查找最多需要log2n即可找到对应的值二分查找必须是有序的大O表示法指出了算法有多快。大O表示法指出了最糟糕情况下的运行时间从快到慢的常见5种大O运行时间:O(logn) < O(n) < O(n * logn) < O(n^2) < O(n!)第2章 选择排序两种最基本的数据结构—数组和链表数组:存储连续的数据数组的查找效率很高,可迅速找到数组的任何元素链表:元素可以存储在内存的任何地方。原创 2022-04-05 10:16:53 · 975 阅读 · 0 评论 -
数据结构与算法---盛最多水的容器、接雨水
盛最多水的容器11. 盛最多水的容器给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。示例 1:输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为原创 2020-11-26 10:54:14 · 252 阅读 · 0 评论 -
数据结构与算法---LRU缓存机制、会议室
LRU缓存机制146. LRU缓存机制运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。实现 LRUCache 类:LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存原创 2020-11-26 00:22:10 · 208 阅读 · 0 评论 -
数据结构与算法---螺旋矩阵、整数反转
螺旋矩阵54. 螺旋矩阵给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例 1:输入:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]示例 2:输入:[ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12]]输出: [1,2,3,4,8,12,11,10,9,5,6,7]思路需要定义四个变量:to原创 2020-11-25 00:53:20 · 825 阅读 · 0 评论 -
数据结构与算法---Pow(x, y)、圆圈中最后剩下的数字
Pow(x, y)50. Pow(x, y)实现 pow(x, n) ,即计算 x 的 n 次幂函数。示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100示例 3:输入: 2.00000, -2输出: 0.25000解释: 2-2 = 1/22 = 1/4 = 0.25说明:-100.0 < x < 100.0n 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。思原创 2020-11-24 21:50:47 · 539 阅读 · 0 评论 -
数据结构与算法---移动零、两数之和、三数之和
移动零283. 移动零给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。思路将所有的0移动到后面,并且保证原来的顺序不变首先,不能直接将0与最后一个元素进行交互,因为0与12一交互,原来的顺序就被打破新建一个变量insertIndex,记录数据将要插入的位置遍历数组如果是0,则跳过,啥也不做如果是非原创 2020-11-24 17:04:17 · 183 阅读 · 0 评论 -
数据结构与算法---DFS---电话号码的字母组合
DFSDFS:Depth First Search深度优先搜索很多排列组合相关的问题,都可以通过DFS来解决电话号码的字母组合17. 电话号码的字母组合给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:“23”输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输原创 2020-11-23 22:58:35 · 146 阅读 · 0 评论 -
数据结构与算法---二叉树---验证二叉搜索树、最大BST子树
验证二叉搜索树98. 验证二叉搜索树给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 2 / \ 1 3输出: true示例 2:输入: 5 / \ 1 4 / \ 3 6输出: false解释: 输入为: [5,1,4,null,null,3,6]原创 2020-11-23 21:04:22 · 196 阅读 · 0 评论 -
数据结构与算法---二叉树---二叉树的最近公共祖先、恢复二叉搜索树
二叉树的绝大部分题目都可以直接通过递归+遍历解决以下,必须掌握:树的高度-递归前中后序遍历层序遍历翻转二叉树二叉树的最近公共祖先236. 二叉树的最近公共祖先给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,原创 2020-11-23 11:37:59 · 221 阅读 · 0 评论 -
数据结构与算法---动态规划---编辑距离、最长回文子串
编辑距离72. 编辑距离给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入:word1 = “horse”, word2 = “ros”输出:3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)rorse -> rose (删除 ‘r’)rose -> ros (删除 ‘e’)示例 2:输入:word原创 2020-11-19 00:20:36 · 310 阅读 · 0 评论 -
数据结构与算法---动态规划---礼物的最大价值、买卖股票的最佳时期
礼物的最大价值47. 礼物的最大价值在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?示例 1:输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 12解释: 路径 1→3→5→2→1 可以拿到最多价值的礼物提示:0 < grid.length <= 2原创 2020-11-18 00:39:27 · 286 阅读 · 0 评论 -
数据结构与算法---字符串---无重复字符的最长子串
无重复字符的最长子串3. 无重复字符的最长子串给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的长度,“pw原创 2020-11-17 22:44:35 · 301 阅读 · 0 评论 -
数据结构与算法---字符串---有效的字母异位词、翻转字符串里的单词
有效的字母异位词242.有效的字母异位词给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1:输入: s = “anagram”, t = “nagaram”输出: true示例 2:输入: s = “rat”, t = “car”输出: false说明:你可以假设字符串只包含小写字母。进阶:如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?思路题目意思:例子1中anagram里面有3a 1n 1g 1r原创 2020-11-15 12:59:03 · 121 阅读 · 0 评论 -
数据结构与算法---字符串---字符串轮转、另一个树的子树
字符串轮转面试题01.09. 字符串轮转给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成(比如,waterbottle是erbottlewat旋转后的字符串)。示例1:输入:s1 = “waterbottle”, s2 = “erbottlewat”输出:True示例2:输入:s1 = “aa”, s2 = “aba”输出:False提示:字符串长度在[0, 100000]范围内。说明:你能只调用一次检查子串的方法吗?思路这道题的意思是,给定一个字符串a,让原创 2020-11-14 21:06:33 · 218 阅读 · 0 评论 -
数据结构与算法---栈---每日温度
每日温度739.每日温度请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。思路1:利用栈该原创 2020-11-14 11:55:29 · 185 阅读 · 0 评论 -
数据结构与算法---栈---最大二叉树、利用栈寻找左右第一个比它大的数
最大二叉树654. 最大二叉树给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。通过给定的数组构建最大二叉树,并且输出这个树的根节点。示例 :输入:[3,2,1,6,0,5]输出:返回下面这棵树的根节点: 6 / \ 3 5 \ / 2 0 \原创 2020-11-13 15:46:15 · 205 阅读 · 0 评论 -
数据结构与算法---栈---最小栈、滑动窗口最大值
栈栈的特点是:先进后出,后进先出利用这个特点,可以解决一些对称有关的问题上一题的回文链表,是否能使用栈解决呢?首先,还是需要找到中间节点3然后,创建一个栈,一个一个压栈,当遇到中间节点3的时候,不入栈,进下一个然后,进行出栈跟新的比较,判断是否相等,直到栈空这思路不错最小栈155. 最小栈设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素原创 2020-11-12 15:32:27 · 214 阅读 · 0 评论 -
数据结构与算法---链表---回文链表
回文链表234.回文链表请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?思路1建立两个指针,left和right,分别指向链表的头和尾判断left.vlaue和right.value是否相等,相等则left = left.next,right = ?问题来了,right的前一个指针找不到了因此,不满足要求原创 2020-11-11 16:46:45 · 342 阅读 · 1 评论 -
数据结构与算法---链表---相交链表、分隔链表
相交链表160. 相交链表编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。例如:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5原创 2020-11-10 23:28:02 · 164 阅读 · 0 评论 -
数据结构与算法---链表---移除链表元素、两数相加
建议涉及到链表的数据结构与算法一定要画图,使得思路清晰,MJ说99%以上的链表题目,画图后就容易想思路了。最好使用头结点,使得不需要判断链表为空的边界条件其他方法有:快慢指针多指针…必备链表知识点:链表节点的插入与删除翻转链表利用快慢指针求中心节点计算链表的长度…移除链表元素203 移除链表元素删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2-&g原创 2020-11-10 13:54:56 · 201 阅读 · 0 评论 -
数据结构与算法---数组、排序---部分排序、有序数组的平方
部分排序16.16 部分排序题目:给定一个整数数组,编写一个函数,找出索引m和n,只要将索引区间[m,n]的元素排好序,整个数组就是有序的。注意:n-m尽量最小,也就是说,找出符合条件的最短序列。函数返回值为[m,n],若不存在这样的m和n(例如整个数组是有序的),请返回[-1,-1]。示例:输入: [1,2,4,7,10,11,7,12,6,7,16,18,19]输出: [3,9]提示:0 <= len(array) <= 1000000大致就是,在一个数组中,找出两个索引原创 2020-11-08 16:27:26 · 432 阅读 · 0 评论 -
数据结构与算法---数组、排序---合并两个有序数组、 颜色分类
合并两个有序数组88. 合并两个有序数组题意:给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]思路1给个直观的,设置一个新的数组nums3,长度是nums1的长度,然后nums1和nums2遍历比较,小的放入。放完之后,将nums3数组赋值给nums1即可但是原创 2020-11-08 00:17:19 · 302 阅读 · 2 评论 -
数据结构与算法---串
串(Sequence)这里的串是指字符串:由若干个字符组成的有限序列串匹配算法查找一个模式串(pattern)在文本串(text)中的位置比如:String text = "Hello World";String pattern = "or";text.indexOf(pattern);//7text.indexOf("other");//-1几个经典的串匹配算法蛮力KMPBoyer-MooreKarp-RabinSundaytlen = text的长度plen = pa原创 2020-11-02 18:05:46 · 186 阅读 · 0 评论 -
数据结构与算法---布隆过滤器、跳表
布隆过滤器需求如果需要编写一个网络爬虫,去爬10亿个网站数据,为了避免爬到重复的网站,如何判断某个网站是否爬过?首先,10亿个网站数据量很大,使用哈希表有些不合适。哈希表确实可以做到O(1)级别找到对应的元素,但10亿级别的数据量,空间复杂度太大,就不合适了。因此,我们需要尝试使用新思路、新方法:布隆过滤器。set之所以可以做到O(1)级别的查找某个元素是否存在,是因为其底部使用的是Hash表,而hash表底层是使用的数组。hashMap之所以可以做到O(1)级别的查找某个元素的对应元素,是因原创 2020-10-31 23:38:48 · 227 阅读 · 0 评论 -
数据结构与算法---动态规划---0-1背包问题
0-1背包问题,我们在数据结构与算法—贪心中谈论过。当时是使用重量优先、价值优先、性价比优先三种贪心策略,使用贪心策略解决的问题。但,这种解决问题的答案并不是最优解。现在我们使用DP来解决0-1背包问题。思路是否为最值问题?求背包最多装载量,是最值问题能否使用DP?原问题能否分解为子问题?可以无后效性满足使用DP步骤?假设values是价值数组,weights是重量数组编号为k的物品,价值是values[k],重量是weights[k],k∈[0, n)确定含义假设原创 2020-10-30 11:49:26 · 286 阅读 · 0 评论 -
数据结构与算法---动态规划---最长公共子串
最长公共子串最长公共子串,Longest Common Substring子串是连续的子序列求两个字符串的最长公共子串长度ABCBA 和 BABCA的最长公共子串是 ABC,长度为3思路是否为最值问题?是能否使用DP解决?原问题分解为子问题可以无后效性无使用DP步骤确定含义假设dp(i, j) 是 str1[i - 1]、str2[j - 1]的最长公共子串i ∈ [1, str1.length];j ∈ [1, str2.length];最长公共子串,必原创 2020-10-29 14:13:51 · 934 阅读 · 0 评论 -
数据结构与算法---动态规划---最长公共子序列
最长公共子序列(LCS)最长公共子序列,Longest Common Subsequence,LCS问:求两个序列的最长公共子序列长度?[1, 3, 5, 9, 10]和[1, 4, 9, 10]的最长公共子序列是[1, 9, 10],长度为31143. 最长公共子序列是否为最值问题?是能否使用DP?原问题分解为子问题无后效性是使用DP步骤确定含义假设两个数组分别是:nums1、nums2i∈[1, nums1.length];j∈[1, nums2.lengt原创 2020-10-28 17:01:22 · 326 阅读 · 0 评论 -
数据结构与算法---动态规划---最大连续子序列和、最长上升子序列
最大连续子序列和问:给定一个长度为n的整数序列,求它的最大连续子序列和比如:-2, 1, -3, 4, -1, 2, 1, -5, 4的最大连续子序列和是4 + (-1) + 2 + 1 = 6是否为最值问题?首先,这是一个求最值的问题,可以考虑使用DP能否使用DP?原问题可以拆解为子问题可以求-2结尾的最大连续子序列求1结尾的最大连续子序列…求4结尾的最大连续子序列无后效性以-5结尾的最大连续子序列只需要找出它前面的1,以1结尾的最大连续子序列的和dp(6),如果这个和原创 2020-10-27 16:47:57 · 782 阅读 · 0 评论 -
数据结构与算法---动态规划---概念、找零钱
动态规划(Dynamic Programming)动态规划简称DP;DP是求最优化问题的一种常用策略通常的使用套路:(一步一步优化)暴力递归(自顶向下,出现了重叠子问题,因此需要优化为2)记忆化搜索(自顶向下,还可以优化为3)递推(或者称为迭代、非递归)(自低向上)上面的步骤是三种方法,每种方法都是对之前方法的优化第一种方法,是最容易想到,也是时间复杂度比较高的一种第二种方法,是对第一种方法的优化第三种方法,就是使用动态规划来解决问题其实可以理解为,我们学习动态规划,就是学习第三原创 2020-10-23 16:13:03 · 696 阅读 · 0 评论 -
数据结构与算法---分治---最大连续子序列和 | 剑指 Offer 42.连续子数组的最大和
分治(Divide And Conquer)分治,分而治之。先分后治分治的一般步骤为:将原问题分解成若干个规模比较小的子问题(子问题和原问题的结构一样,只是规模不一样)子问题又不断分解成规模更小的子问题,直到不能再分解(直到可以轻易计算出子问题的解)利用子问题的解推导出原问题的解因此,分治策略非常适合用递归需要注意的是:子问题之间是相互独立的分治的应用:快速排序、归并排序、大数乘法主定理分治策略通常遵守一种通用模式:解决规模为n的问题,分解成a个规模为n/b的子问题,然后在O(n原创 2020-10-22 22:20:32 · 1749 阅读 · 1 评论 -
数据结构与算法---贪心
贪心(Greedy)贪心策略,也称为贪婪策略每一步都采取当前状态下的最优选择(局部最优),从而希望推导出全局最优解贪心的应用:哈夫曼树最小生成树最优装载问题(加勒比海盗)题:有一批古董,每一件都价值连城,一旦打碎就失去了价值。海盗船的载重量为W,每件古董的重量为wi,海盗们如何选古董才能尽可能多的达到最大价值?比如:W为30,wi分别为:3、5、4、10、7、14、2、11贪心策略:每一次都优先选择重量最小的古董可以每次拿一个,然后计算目前拿到的古董总重量,与船的载重量相比;也可以,原创 2020-10-22 11:50:25 · 189 阅读 · 0 评论 -
数据结构与算法---回溯、剪枝
通过这节课,我们将学到:八皇后摆放问题、走迷宫的解法回溯(Back Tracking)这个英文单词可以的,”回去追踪”,回溯回溯可以理解为:通过选择不同的岔口来通往目的地每一步选择一条路出发,能进则进,不能进则退回上一步(回溯),换一条路再试树、图的深度优先搜索就是典型的回溯应用可以看出,回溯适合使用递归来解决。知识的串联性,递归->回溯八皇后问题(Eight Queens)在一个8x8的国际象棋上,摆放八个皇后,使其不能相互攻击:如果任意两个皇后处于同一行、同一列、同原创 2020-10-20 23:49:14 · 505 阅读 · 0 评论 -
数据结构与算法---递归
递归(Recursion)递归:函数(方法)直接或者间接调用自身。递归是一种常用的编程技巧栈内存,属于内存,是存储数据的。栈内存可以存储函数,按序加载push,然后最后加入的最先退出pop,这就是个栈的数据结构。这也就是称为栈空间(栈内存)的原因。如果递归调用没有终止,将会一直消耗栈空间最终导致栈内存溢出(Stack Overflow)Stack Overflow,这不就是那个有名的网站么所以,必须要有一个明确的结束递归的条件,也叫做边界条件、递归基递归的基本思想拆解问题把规模大的原创 2020-10-15 14:35:11 · 285 阅读 · 0 评论 -
数据结构与算法---图
本章只记录一些基本概念图(Graph)图由 顶点(vertex) 和 边(edge) 组成,通常表示为G = (V, E)G表示一个图,V是顶点集,E是边集顶点集V有穷且非空任意两个顶点之间都可以用边来表示它们之间的关系,边集E可以是空的一下三个,都是图有向图(Directed Graph)有向图的边是有明确方向的有向无环图(Directed Acyclic Graph,简称DAG)如果一个有向图,从任意顶点出发无法经过若干条边回到该顶点,那么它就是一个有向无环图出度、入度出度原创 2020-10-13 18:30:23 · 167 阅读 · 0 评论 -
数据结构与算法---并查集
并查集(Union Find)原创 2020-10-12 17:14:22 · 245 阅读 · 0 评论 -
数据结构与算法---排序---计数排序、基数排序、桶排序
之前学的7种排序:冒泡、选择、插入、希尔、快速、归并、堆排序都是基于比较的排序最低的平均时间复杂度为O(nlogn)而接下来要学习的计数排序、基数排序、桶排序,都不是基于比较的排序它们是典型的用空间换时间,在某些时候,平均时间复杂度要低于O(nlogn)计数排序(Counting Sort)计数排序是对整数的排序计数排序是对一定范围内的整数进行排序计数排序的核心思想统计每个整数在序列中出现的次数,进而推导出每个整数在有序序列中的索引...原创 2020-10-10 14:54:31 · 161 阅读 · 0 评论 -
数据结构与算法---排序---希尔排序
希尔排序(Shell Sort)1959年由唐纳德~希尔提出的希尔排序把序列看做是一个矩阵,分成m列,逐列进行排序m从某个整数逐渐减为1当m为1时,整个序列将安全有序因此,希尔排序也被称为递减增量排序矩阵的列数取决于步长序列(step sequence)比如,如果步长序列为{1, 5, 19, 41, 109, …},就代表依次分成109列、41列、19列、5列、1列进行排序不同的步长序列,执行效率也不同希尔本人给出的步长序列是n/2^k,其中k = 1, 2, 3, 4比如n=16的时原创 2020-10-09 17:41:47 · 247 阅读 · 0 评论 -
数据结构与算法---排序---快速排序
快速排序(Quick Sort)快速排序是常用且被问概率比较大的排序算法,属于重中之重的算法,必须掌握。执行流程1 从序列中选择一个轴点元素(pivot)假设每次选择0位置的元素为轴点元素2 利用pivot将序列分割成2个子序列将小于pivot的元素放在pivot前面(左侧)将大于pivot的元素放在pivot后面(右侧)等于pivot的元素放在哪边都可以3 对子序列进行1、2操作直到不能再分割(子序列中只剩下1个元素)快速排序的本质是:逐渐将每一个元素都转换成轴点元素如何找到轴原创 2020-10-09 14:45:56 · 218 阅读 · 0 评论 -
数据结构与算法---排序---归并排序
归并排序(Merge Sort)1945年由冯诺依曼首次提出。执行流程1 不断的将当前序列平均分割成两个子序列直到不能再分割(序列中只剩1个元素)2 不断的将两个子序列合并成一个有序序列直到最终只剩下1个有序序列归并排序,主要有分和和两个步骤。其中,分感觉好理解些,找出begin,end,求出middle,然后递归调用,直到元素个数小于或等于1时,不再分割。不难写出:public static void divideSort(int[] array, int begin, int end原创 2020-09-30 14:58:07 · 181 阅读 · 0 评论 -
数据结构与算法---排序---插入排序、二分搜索
插入排序(Insertion Sort)插入排序非常类似于扑克牌的排序执行流程:1 在执行过程中,插入排序会将序列分为两部分:头部是已经排好序的,尾部是待排序的。2 从头开始扫描每一个元素每当扫描到一个元素,就将它插入到头部合适的位置,使得头部数组仍然保持有序。不难写出代码:public class sort { public static void main(String[] args) { int[] array = {19, 18, 67, 199, 6, 56}; in原创 2020-09-29 22:33:09 · 297 阅读 · 0 评论