算法
MuYanH
这个作者很懒,什么都没留下…
展开
-
堆排序
描述堆排序是一个效率要高得多的选择排序,首先把整个数组变成一个最大堆,然后每次从堆顶取出最大的元素,这样依次取出的最大元素就形成了一个排序的数组。堆排序的核心分成两个部分,第一个是新建一个堆,第二个是弹出堆顶元素后重建堆。新建堆不需要额外的空间,而是使用原来的数组,一个数组在另一个维度上可以当作一个完全二叉树(除了最后一层之外其他的每一层都被完全填充,并且所有的节点都向左对齐),对于下标为i的元素,他的子节点是2*i+1和2*i+2(前提是没有超出边界)。在新建堆的时候从左向右开始遍历,当遍历到一个元素原创 2020-09-14 10:09:09 · 152 阅读 · 1 评论 -
希尔排序
描述希尔排序可以看作是一个冒泡排序或者插入排序的变形。希尔排序在每次的排序的时候都把数组拆分成若干个序列,一个序列的相邻的元素索引相隔的固定的距离gap,每一轮对这些序列进行冒泡或者插入排序,然后再缩小gap得到新的序列一一排序,直到gap为1比如对于数组[5,2,4,3,1,2],第一轮gap=3拆分成[5,3]、[2,1]和[4,2]三个数组进行插入排序得到[3,1,2,5,2,4];第二轮gap=2,拆分成[3,2,2]和[1,5,4]进行插入排序得到[2,1,2,4,3,5];最后gap=1,全原创 2020-09-13 16:32:32 · 117 阅读 · 0 评论 -
快速排序
描述快速排序(有时称为分区交换排序)是一种高效的排序算法。由英国计算机科学家Tony Hoare于1959年开发并于1961年发表,它在现在仍然是一种常用的排序算法。如果实现方法恰当,它可以比主要竞争对手(归并排序和堆排序)快两到三倍。其核心的思路是取第一个元素(或者最后一个元素)作为分界点,把整个数组分成左右两侧,左边的元素小于或者等于分界点元素,而右边的元素大于分界点元素,然后把分界点移到中间位置,对左右子数组分别进行递归,最后就能得到一个排序完成的数组。当子数组只有一个或者没有元素的时候就结束这个原创 2020-09-13 16:13:34 · 147 阅读 · 0 评论 -
归并排序
描述归并排序是典型的使用分治思想(divide-and-conquer)解决问题的案例。在排序的过程中,把原来的数组变成左右两个数组,然后分别进行排序,当左右的子数组排序完毕之后,再合并这两个子数组形成一个新的排序数组。整个过程递归进行,当只剩下一个元素或者没有元素的时候就直接返回。C++代码实现class Solution {public: vector<int> sortArray(vector<int>& nums) { mergesor原创 2020-09-13 15:47:13 · 111 阅读 · 0 评论 -
插入排序
描述插入排序的核心思想是遍历整个数组,保持当前元素左侧始终是排序后的数组,然后将当前元素插入到前面排序完成的数组的对应的位置,使其保持排序状态。有点动态规划的感觉,类似于先把前i-1个元素排序完成,再插入第i个元素,构成i个元素的有序数组C++代码实现class Solution {public: vector<int> sortArray(vector<int>& nums) { int len = nums.size();原创 2020-09-13 15:38:39 · 107 阅读 · 0 评论 -
选择排序
描述选择排序的思路比较简单,先找到前n个元素中最大的值,然后和最后一个元素交换,这样保证最后一个元素一定是最大的,然后找到前n-1个元素中的最大值,和第n-1个元素进行交换,然后找到前n-2个元素中最大值,和第n-2个元素交换,依次类推到第2个元素,这样就得到了最后的从小到大的排序数组。如果从大到小排序,先找到前n个元素中最小的值,然后和最后一个元素交换,这样保证最后一个元素一定是最小的,然后找到前n-1个元素中的最小值,和第n-1个元素进行交换,然后找到前n-2个元素中最小值,和第n-2个元素交换,依原创 2020-09-13 15:30:58 · 72 阅读 · 0 评论 -
冒泡排序
描述冒泡排序是从左到右依次比较相邻的两个元素,如果前一个元素比较大,就把前一个元素和后一个交换位置,遍历数组之后保证最后一个元素相对于前面的永远是最大的。然后让最后一个保持不变,重新遍历前n-1个元素,保证第n-1个元素在前n-1个元素里面是最大的。依此规律直到第2个元素是前2个元素里面最大的,排序就结束了。因为这个排序的过程很像冒泡泡,找到最大的元素不停的移动到最后端,所以这个排序算法就叫冒泡排序。C++代码实现其过程:class Solution {public: vector<int原创 2020-09-13 08:49:02 · 102 阅读 · 0 评论 -
排序算法特性
简介排序算法是根据元素的对应的比较运算符重新排列给定的数组的算法,输出的数组是一个根据比较符从小到大或者从大到小依次排列的数组。比较运算符是用于确定相应数据结构中元素的新顺序,比如在整数数组里面,对应的比较符号就是大于或者小于号,用户也可以自己定义对应的比较运算符。比如如果输入是[5,4,2,3,1],按照从小到大输出,结果应该是[1,2,3,4,5]。特性稳定性如果在数组中有两个元素是相等的,在经过某个排序算法之后,原来在前面的的那个元素仍然在另一个元素的前面,那么我们就说这个排序算法是稳定的原创 2020-09-13 08:31:24 · 191 阅读 · 0 评论