算法
主要讲了什么是算法,算法如何表示,如何衡量算法的优劣,常见的几种搜索和排序算法的原理。
章节目录
- 算法概念
- 算法的衡量
- 常见的查找和排序算法
算法概念
定义:算法是定义一个可终止过程的一组无歧义的、可执行的步骤的有序集合。
程序是算法的表示,而进程又是执行算法的活动。
算法的衡量
时间复杂度
// 时间复杂度定性的描述了算法执行完毕所需的步数
空间复杂度
// 空间复杂度定性的描述了该算法执行过程中需要占用的内存大小
常见的查找和排序算法
插入排序
//描述: 插入排序就是从第二个元素开始,把这个元素取出来,用一个临时变量保存,第二个元素的位置就成了一个空隙,然后拿第二个元素前面(从右到左)的元素,依次与临时变量比较,遇见比临时变量大的元素,将元素与空隙交换位置,直到找到一个元素比临时变量小或者空隙移到第一个位置,将临时变量插入空隙中。这样就能保证前两个元素顺序已经排好,接下来取第三个元素到临时变量中,重复上述过程,保证前三个元素已经排好序,再取第四个元素重复,保证第四个元素已经排序,一直到最后一个元素也重复完上述过程,整个数组就排序好了。
快速排序
// 描述--快速排序用到了递归算法。
快速排序首先是任意找一个元素作为轴,先把轴移到正确的位置,那么对
轴两边的子数组也任意找一个元素作为轴,把轴移到正确的位置,再重复上述过程,
直到子数组的长度为 0 或 1就到达了基准情况。
//
如何将一个轴移到正确的位置?
选择一个轴后,左指针和右指针分别指向除轴外的数组的最左边和最右边
(1) 左指针逐个格子向右移动,当遇到大于或等于轴的值时,就停下来。
(2) 右指针逐个格子向左移动,当遇到小于或等于轴的值时,就停下来。
(3) 将两指针所指的值交换位置。
(4) 重复上述步骤,直至两指针重合,或左指针移到右指针的右边。
(5) 将轴与左指针所指的值交换位置。
二分搜索
//描述:
首先将数组按照从小到大(或从大到小)排序好;
第一步取数组的中间值和 target 比较,如果中间值大于 target,那么抛弃数组中间值右边的部分;
取剩余数组的中间值和 target 进行比较,如果中间值小于 target 那么抛弃中间值左边的部分;
再取剩余数组的中间值进行比较,这样一次取下去就知道了 target 是否在原数组中。