![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
Tinero
这个作者很懒,什么都没留下…
展开
-
排序算法——快速排序【未写完】
1. 在一个无序数组中取一个数key,每一趟排序的最终目的是: 让key左边的所有数都比key小,让key右边的所有数都比key大【假设进行升排序】也就是说,无论key的左边还是右边是否有序,key都到了它在整个数组有序时,应该在的位置上,对于key来说,他已经有序了, 即每次排序都会固定好一个数。2.接着,再对key的左右区间进行单趟排序,直到每个数都到达它该到的位置上,即整个数组有序。快速排序:通过多次的比较与交换来完成排序,而这个过程又被分为多次重复单趟排序。原创 2023-05-01 23:32:14 · 120 阅读 · 0 评论 -
排序算法——简单选择排序
每走一趟,都在待排序的元素中选择关键字最小【或最大】的元素加入有序子序列,如果数组中有n个元素,若进行简单选择排序,只需走n-1趟就可以,因为如果只剩最后一个的话,就不需要再选择最小【或最大】的元素了。每次选择最小【或最大】的元素,添加在前面的有序序列中。【绿色代表有序序列,橘色代表待排序序列】原创 2023-04-28 21:55:38 · 89 阅读 · 0 评论 -
排序算法——冒泡排序
通过相邻两个数的比较,将较大的数放在最后面,每一趟确定一个数的最终位置,重复这个过程,直到序列有序。,就是一种最基础的交换排序。原创 2023-04-27 22:57:05 · 52 阅读 · 0 评论 -
排序算法——直接插入排序
上图中,第一行为待排序的数组,分割线后的表格中,每一行都代表一次排序后的结果,其中绿色代表有序的序列,橘色代表待排序的序列。注:这个版本的代码,是写代码写嗨了,写成面向对象版本的了,如果想看简化版,最下面有。:使用的是双层循环,外层循环对除了第一个元素之外的所有元素进行遍历, 内层循环。:将一个记录插入到已经排序好的有序表中,从而得到一个新的、记录增1的有序表。从上图中,我们可以得出,直接插入排序是具有。对当前元素前面有序表进行待插入位置查找,并进行移动。,对于少量元素的排序,这是一个很有效的算法。原创 2023-04-25 23:02:02 · 44 阅读 · 0 评论 -
算法——枚举
根据提出的问题枚举出所有可能的状态,并用问题给定的约束条件进行检验,判断那些状态是需要的,那些是不需要的,能够使得命题成立的状态,即为其解。如果三元组 (arr[i], arr[j], arr[k]) 满足下列全部条件,则认为它是一个 好三元组。解释:一共有 4 个好三元组:[(3,0,1), (3,0,1), (3,1,1), (0,1,1)]。给你一个整数数组 arr ,以及 a、b 、c 三个整数。输入:arr = [3,0,1,1,9,7], a = 7, b = 2, c = 3。原创 2023-04-24 22:14:31 · 114 阅读 · 0 评论 -
算法——递归
如果存在一个整数 x 使得 n == 2^x ,则认为 n 是 2 的幂次方。除去1这个特殊的情况,其他的各种情况都可以通过递归来判断该数是否为2的幂次方,判断的方式,就是通过除以2来不断的缩小范围,直到满足结束条件。如果不是2的幂次方,那么它就不能够一直被除到2,当他一直被除到小于2时,那么就能判断出,它不是2的幂次方。如果是2的幂次方,那么它就能够一直被除到2【注意:此时,先排除掉1的这种特殊情况】2.提取重复的逻辑,不断的去缩小问题的规模【如果没有这个,递归个寂寞】解释:24 = 16。原创 2023-04-24 23:04:20 · 92 阅读 · 0 评论