数据结构与算法
文章平均质量分 75
菜籽爱编程
这个作者很懒,什么都没留下…
展开
-
6分钟彻底搞定冒泡排序
冒泡排序原理冒泡排序(Bubble Sort),重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。冒泡排序思路比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个(即已经排好的元素)。重复上面的步骤,直到没有任何一对数字需原创 2021-06-02 10:03:51 · 151 阅读 · 0 评论 -
4分钟学会桶排序
桶排序算法思想桶排序思想就是把区间划分为n个大小相同的子区间,这样的子区间称为桶。然后将区间的每个元素按区间范围分到各个桶中去。每一个桶再分个排序,然后按照次序把每个桶中的元素依次取出来,就能把区间排完序。桶排序的时间复杂度和空间复杂度都是O(n),桶排序是一种稳定的排序算法。但是桶排序的性能并非是绝对稳定的,因为如果元素分布不均衡,比如说创建了100个桶,大多数元素都集中在了第1个桶,这样桶排序的时间复杂度就会退化为O(n logn),而且还浪费了空间。一个例子带你了解桶排序假设有一个序列,我们对此原创 2021-05-27 22:59:21 · 180 阅读 · 0 评论 -
5分钟搞定快速选择算法
快速选择思想快速选择思想源于快速排序,但我们只进行部分快速排序,只要找到我们要的位置上的元素,排序就不再进行下去。快速选择的方法跟快速排序基本一致,差别在于我们有给定要找的元素位置,在排序基准值时,把基准值的位置和我们要找的位置进行比较。如果我们要找小于基准值位置的元素,便缩小至左子区间继续查找;如果我们要找大于基准值位置的元素,便缩小至右子区间继续查找。一个例子让你掌握快速选择我们给定一个数组,假设要找排完序后数组的第3个位置上元素的值。我们定义临时变量temp存放基准值,定义左标志位定位至数组第一原创 2021-05-26 08:43:49 · 1436 阅读 · 0 评论 -
1分钟掌握快速排序
快速排序思想最开始找出一个基准值,通过一趟排序将待排序的序列分割成独立的两个部分,前面的这一部分元素都比基准值小,后面这一部分的元素都比基准值大。然后分别再对两个部分的序列进行排序,以达到整个序列有序。一个例子让你完全掌握快速排序我们给定一个无序数组。定义临时变量temp存放基准值,定义左标志位定位至数组第一个元素,定义右标志位定位至数组最后一个元素。我们假定左标志位为基准值。首先我们把左标志位的元素值5放入临时变量temp中。然后比较基准值5与右标志位元素值8。右标志位的值大于基准值,满足排原创 2021-05-25 01:20:01 · 83 阅读 · 0 评论 -
二分查找总结
二分查找二分查找也常被称为二分法或者折半查找(Binary Search),每次查找时通过将待查找区间分成两部分并只取一部分继续查找,将查找的复杂度大大减少。对于一个长度为 O(n)O(n)O(n) 的数组,二分查找的时间复杂度为 O(logn)O(log n)O(logn)。二分查找也可以看作双指针的一种特殊情况。双指针类型指针通常是一步一步移动的,而在二分查找里指针每次移动半个区间长度。通常题目给定顺序存储结构我们可以联想到二分查找。下面给出了二分查找的算法框架,需要注意的部分就在于左右边界的初始定原创 2021-05-20 00:50:25 · 49 阅读 · 0 评论 -
贪心算法总结
贪心算法又称为贪婪算法(greedy algorithm),是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,它期望通过局部最优选择从而得到全局最优的解决方案。贪心本质贪心算法并不是从整体最优考虑,它所做出的选择只是在某种意义上的局部最优。贪心算法能得到许多问题的整体最优解或整体最优解的近似解。贪心算法中,我们一旦做出选择,就不能反悔,而且最终得到的不一定是最优解,而是最优解的近似解,选择什么样的贪心策略,直接决定算法的好坏。重要特性利用贪心算法求解的问题往往应该具备以下两个重要的特性:原创 2021-05-07 10:30:26 · 211 阅读 · 0 评论