排序算法
一叶知秋的BLOG
没有过不去的黑夜,也没有等不到的明天。乾坤未定,你我皆是黑马。
展开
-
python 数组中第k个最大元素
数组中第k个最大元素给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4 提示:1 <= k <= nums.length <= 104-104 <= nums[i] <= 104题解原创 2022-01-03 08:00:00 · 1479 阅读 · 0 评论 -
python 对链表进行插入排序
对链表进行插入排序插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据插入完为止。 示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5题解原创 2022-01-02 21:47:23 · 1380 阅读 · 0 评论 -
python 三指针解决颜色分类
颜色分类给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。示例 1:输入:nums = [2,0,2,1,1,0]输出:[0,0,1,1,2,2]示例 2:输入:nums = [2,0,1]输出:[0,1,2]示例 3:输入:nums = [0]输出:[0]示例 4:输入:nums = [1]输出:[1] 提示:原创 2021-12-31 08:00:00 · 286 阅读 · 0 评论 -
python 合并区间
| 合并区间以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。示例 1:输入:intervals = [[1,3],[2,6],[8,10],[15,18]]输出:[[1,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入:intervals =原创 2021-12-30 08:00:00 · 3531 阅读 · 0 评论 -
python判断能否形成等差数列
|判断能否形成等差数列给你一个数字数组 arr 。如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个数列就称为 等差数列 。如果可以重新排列数组形成等差数列,请返回 true ;否则,返回 false 。 示例 1:输入:arr = [3,5,1]输出:true解释:对数组重新排序得到 [1,3,5] 或者 [5,3,1] ,任意相邻两项的差分别为 2 或 -2 ,可以形成等差数列。示例 2:输入:arr = [1,2,4]输出:false解释:无法通过重新排序原创 2021-12-29 08:00:00 · 2620 阅读 · 0 评论 -
python 有效的字母异位词
| 有效的字母异位词给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。示例 1:输入: s = “anagram”, t = “nagaram”输出: true示例 2:输入: s = “rat”, t = “car”输出: false提示:1 <= s.length, t.length <= 5 * 104s 和 t 仅包含小写字母题解class Solu原创 2021-12-28 08:00:00 · 764 阅读 · 0 评论 -
python 合并排序的数组
| 合并排序的数组给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B。编写一个方法,将 B 合并入 A 并排序。初始化 A 和 B 的元素数量分别为 m 和 n。示例:输入:A = [1,2,3,0,0,0], m = 3B = [2,5,6], n = 3输出: [1,2,2,3,5,6]说明:A.length == n + m|题解class Solution: def merge(self, A: List[int], m: int原创 2021-12-26 19:30:29 · 900 阅读 · 0 评论 -
python 快速排序
一、快速排序算法快速排序实现基本思想是:通过一次排序将整个无序表分成相互独立的两部分,其中一部分中的数据都比另一部分中包含的数据的值小,然后继续沿用此方法分别对两部分进行同样的操作,直到每一个小部分不可再分,所得到的整个序列就成为了有序序列。二、快速排序流程(1) 从数列中挑出一个基准值。(2) 将所有比基准值小的摆放在基准前面,所有比基准值大的摆在基准的后面(相同的数可以到任一边);在这个分区退出之后,该基准就处于数列的中间位置。(3) 递归地把"基准值前面的子数列"和"基准值后面的子数列"进行原创 2021-12-26 16:22:56 · 502 阅读 · 0 评论 -
python调整数组顺序使奇数位于偶数前面
|调整数组顺序使奇数位于偶数前面输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。示例:输入:nums = [1,2,3,4]输出:[1,3,2,4]注:[3,1,2,4] 也是正确的答案之一。提示:0 <= nums.length <= 500000 <= nums[i] <= 10000题解class Solution: """ 解题思路: 1.双指针解法 p指针正序遍历原创 2021-12-25 23:23:51 · 1630 阅读 · 0 评论 -
python 归并排序(详解)
一、归并排序归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之),将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序,若将两个有序表合并成一个有序表,称为二路归并。二、归并排序的基本思想将待排序序列R[0…n-1]看成是n个长度为1的有序序列,将相邻原创 2021-12-24 08:00:00 · 9451 阅读 · 0 评论 -
python 选择排序算法
一、选择排序(selection sort)选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,所以称为:选择排序。二、选择排序原理设第一个元素为比较元素,依次和后面的元素比较,比较完所有元素并找到最小元素,记录最小元素下标,和第0个下表元素进行交换。在未排序区域中,重复上述操作,以此类推找出剩余最小元素将它换到前面,即完成排序。三、选择排序和冒泡排序对比选择排序是一种简单直观的排序算法原创 2021-12-23 08:00:00 · 16851 阅读 · 3 评论 -
python 插入排序算法
一、概念及原理插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。二、插入排序过程如下图所示,插入排序的实现思路顾名思义,就是不断地在一个已经是有序的数组中,寻找合适位置并插入新元素。三、具体实现步骤为:首先我们把整个数组拆分为有序区间和未排序区间,有序区间在插入排序一开始只有一个元素原创 2021-12-22 08:00:00 · 2269 阅读 · 0 评论 -
python 冒泡排序算法(超级详细)
一、什么是冒泡排序冒泡排序是一种简单的排序算法,它也是一种稳定排序算法。其实现原理是重复扫描待排序序列,并比较每一对相邻的元素,当该对元素顺序不正确时进行交换。一直重复这个过程,直到没有任何两个相邻的元素可以交换,就表明完成了排序。一般情况下,称某个排序算法稳定,指的是当待排序序列中有相同的元素时,它们的相应位置在排序后不会发生改变。二、示例假设待排序序列为 (5,1,4,2,8),如果采用冒泡排序对其进行升序(由小到大)排序,则整个排序过程如下所示:第一轮排序,此时整个序列中的元素都位于原创 2021-12-21 08:00:00 · 76249 阅读 · 20 评论