
算法
FanMLei
努力成为一名GEEK!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
常用排序算法:冒泡排序
冒泡排序思路:列表中的每两个相邻的数,如果前面比后面的大,则交换这两个数。直到列表变为有序的时候为止,例如下面这个列表 [ 2, 1, 3, 0, 7, 6, 5, 4]第一趟: 第一步:列表的第一位和第二位比较:如果第一位大于第二位,则交换两者位置。由于2大于1,所以此时列表 为:[1, 2, 3, 0, 7...原创 2018-10-18 21:39:08 · 259 阅读 · 0 评论 -
常用排序算法:桶排序
算法思路:我们之前提到过计数排序,计数排序在某些情况下并不太适合,例如元素范围太大的情况,桶排序算是对于计数排序的一种改进,桶排序首先根据元素大小放置到不同的桶中,然后在对每一个桶内元素进行排序。例如数组[29,25,3,49,9,37,21,43],可以以10为区间来存放元素,具体操作如下图:关于“桶”这个结构怎么实现,在python里面可以用二位数组来表示[ [ ], [ ...原创 2018-10-24 23:58:39 · 451 阅读 · 0 评论 -
常用排序算法:计数排序
算法思路:顾名思义计数排序就是统计每个数出现的次数,例如给0-20范围内的数排序,首先建立一个长度为21的空数组,然后统计每个数出现的次数,再按照下标存入空数组中,例如1出现10次那么数组中的第二个元素为10 ,统计完所有的数之后呢在新建一个数组,在遍历之前存放次数的数组,按照个数往新数组中添加对应的数。以一个例子来说明[1,2,3,1,0,4,1,3,4,2,0,1,2,3,4]排序过程...原创 2018-10-24 17:39:25 · 431 阅读 · 1 评论 -
常用排序算法:希尔排序
算法思路:希尔排序算是插入排序的一种,是改进版的直接插入排序,和直接插入排序不同的是它是按组进行插入排序的。步骤如下:取一个整数d1 = n / 2,将元素分成d1个组,每组相邻元素之间距离d1,然后在每组内部进行直接插入排序。 取第二个整数d2 = d1 / 2再将元素分成d2个组,然后再在每组内部进行插入排序。 重复上面的步骤直到d = 1 的时候即所有元素在同一组进行插入排序...原创 2018-10-24 16:53:06 · 331 阅读 · 0 评论 -
常用排序算法:归并排序
算法思路:简单来说归并排序就是将两个有序的序列合并成一个完整的有序序列。具体步骤如下: 1. 选取序列1的第一个元素和序列2的第一个元素,较小的存放到新序列的第一位 2. 选序列1的第二个元素再和序列2的第一个元素比较,选较小的存放到新序列的低二位 3. 重复上述步骤直到序列1序列2没有下一个元素为止那么问题来了,一个无...原创 2018-10-24 03:08:27 · 317 阅读 · 0 评论 -
常用排序算法:堆排序
算法思路:堆:分为大根堆和小根堆 大根堆:一棵完全二叉树,满足任意一节点都比其孩子节点大。 小根堆:一棵完全二叉树,满足任意一节点都比其孩子节点小。堆排序流程: 构造堆 得到堆顶元素,为最大元素 去掉堆顶,将堆的最后一个元素放到堆顶,然后调整重新使堆有序 堆顶元素为第二大的元素 重复第三步直到堆变空例如以[4, 5, 3, 6, 1, 2 ]为...原创 2018-10-23 18:20:14 · 260 阅读 · 0 评论 -
常用排序算法:快速排序
算法思路快速排序差不多是面试中问的最多的一种排序算法了,快排是比较容易理解的,核心思路就是,选取一个数作为基准,将原来的列表分为两个部分,一部分全部小于这个基准数,另外一部分全部大于这个基准数,然后呢再按照这个方法对划分出来的两部分继续做同样的操作,直到无法划分的时候排序也就完成了。以数组[3,2,1,5,4,6]为例,其排序过程如下图所示。关于时间复杂度问题, 平均复杂度n log(...原创 2018-10-23 15:00:21 · 325 阅读 · 0 评论 -
常用排序算法:基数排序
算法思路:步骤:1. 创建10个队列(0-9) 2. 遍历每个数位,按照位数存入不同的桶中 3. 然后再将桶中的元素依次取出,放回到原有列表中 4. 继续执行上两步操作,直到列表中每个数的每一位都做完成排序 5. 最后取...原创 2018-10-25 14:52:09 · 309 阅读 · 0 评论 -
常用排序算法:直接插入排序
算法思路插入排序就跟我们打扑克抽牌是一样的形式,每次新抽的牌插入到已有的有序牌中,是牌始终保持有序状态,例如[1,3, 2,4,0] 数组,先将1作为起始牌,下一张牌为3,第一趟完成后变成[1, 3]有序数组和[2,4,0]无序数组,接下来插入2,有序数组变成[1,2,3],无序数组变成[4,0],以此类推知道将所有的无序数组都插入完毕就能完成排序操作。插入排序算法适用于少量数据的排序,时...原创 2018-10-22 16:54:19 · 186 阅读 · 0 评论 -
常用排序算法:直接选择排序
直接选择排序算法思路:第 1 趟,在待排序记录 r1 ~ r[n]中选出最小的记录,将它与 r1 交换;第 2 趟, 在待排序记录 r2 ~ r[n]中选出最小的记录,将它与 r2 交换;以此类推,第 i 趟在待排序 记录 r[i] ~ r[n]中选出最小的记录,将它与 r[i]交换,使有序序列不断增长直到全部排序 完毕。例如[2, 4, 3, 1, 0],第一趟找到最小值为0,将0和第一...原创 2018-10-22 13:40:59 · 295 阅读 · 0 评论 -
Leet Code OJ 简单(四)
88.合并两个有序数组 56ms 提交中击败了47.05% 的用户class Solution: def merge(self, nums1, m, nums2, n): """ :type nums1: List[int] :type m: int :type nums2: List[int] ...原创 2018-11-22 17:46:58 · 330 阅读 · 0 评论