
高级算法
用C++实现常用的高级算法
聪聪菜的睡不着
这个作者很懒,什么都没留下…
展开
-
【啊哈算法】三、快速排序(二)
我们在前面的快速排序(一)中已经阐述了快速排序的基本思想,实现以及优化。前面的排序思想适用于所有数据,前提是存储数据的数据结构支持双向遍历,否则不能进行快排,那么我们应该如何给单向数据结构进行快排呢?文章目录:一、单向扫描的快速排序思想二、实现单向快速排序一、单向扫描的快速排序思想我们先来分析一下上一篇双向扫描的特点,以此来推导单向扫描:为了方便理解,我们将哨兵用 left 和right表示。双向扫描: left指向开头,right指向结尾,我们以第一遍排序为例,我们将基准选择最左边的一位,就是ar原创 2020-05-14 00:16:46 · 482 阅读 · 0 评论 -
【啊哈算法】三、快速排序(一)
今天我们来学习一个不浪费空间,速度又快的排序算法,那就是快速排序。文章目录一、概念二、特点三、实现(一)递归实现(二)对于基准选择的优化(三)非递归实现一、概念我们上次学的冒泡排序是两两交换排序,这样很费时间,所以人们想出了跳跃式交换比较,让交换的距离增加,那么总的比较次数和交换次数就少了,这就是快速排序的思想,严格来阐述:我们每次选择一个基准(以它为标准来比较),定义哨兵i,j,从两边开始探测,每次j(右边哨兵)先走,哨兵 j 找小于基准的值,哨兵 i 找大于基准的值,找到后交换,直到 i 和原创 2020-05-12 20:55:02 · 664 阅读 · 0 评论 -
【啊哈算法】二、冒泡排序
今天来学习另一个排序算法,这个算法解决了桶排序的缺点,但在某些地方比如时间复杂度不如桶排序。文章目录一、概念二、特点三、例题(一)冒泡核心代码1. 平均复杂度为O(N^2)的,无论数据是否有序。2. 当数据有序时,时间复杂度为O(N)。(二)成绩排序一、概念冒泡排序:是一种排序算法,它的基本思想是每次比较相邻的元素,如果它们的顺序错误就把它们交换过来,每次都可以确定一个最大或最小数的位置。...原创 2020-05-07 12:04:44 · 340 阅读 · 0 评论 -
【啊哈算法】一、桶排序
排序算法千万种,但最容易和简单的排序算法桶排序当仁不让,我们今天就来了解一下它,看它如何使用,适用什么场景。文章标题一、概念二、特点三、例题一、概念桶排序 (Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。当要被排序的数组内的数值...原创 2020-05-03 23:57:21 · 430 阅读 · 0 评论 -
【排序算法】归并排序
今天我们来学习一下归并排序,通过字面意思就可以知道这个算法是通过将数据逐步放在一起进行排序,主要采用分治的思想,我们今天主要讲两种办法实现:方法:(一)递归实现(二)非递归实现(一)递归实现我们可以这样理解:分治递归,回退排序。主要思想和步骤是:开辟数组br,用来保存排序数组。对ar数组进行不断递归划分,从n/2,n/4……直到只剩下一个元素,一定要记住在不断递归划分时,它是先不断递归...原创 2020-04-22 22:46:09 · 1936 阅读 · 0 评论 -
【初识算法】递归
文章目录一、理解递归二、分析递归三、递归练习(一)整数反转(有符号,无符号)(二)斐波那契数列(三)数组中查找元素val(四)二分查找递归在算法中是很重要的一个思想,任何高级算法的实现要想代码看起来简洁离不开递归,今天我们就来说说它。一、理解递归如何去理解递归思想:我们可以画图来理解它,将每一次的过程通过画图来展现,那么思想应该可以理解了。通过函数栈帧理解,可以通过它来看每个变量的...原创 2020-04-08 23:35:30 · 370 阅读 · 0 评论 -
【递归】二分查找
题目:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。你可以假设 nums 中的所有元素是不重复的。n 将在 [1, 10000]之间。nums 的每个元素都将在 [-9999, 9999]之间。示例:示例 1:输入: nums = [-1,0,3,5,9,12],...原创 2020-04-08 23:26:13 · 405 阅读 · 0 评论