总结一下排序的算法
选择排序
思路: 找出数组中最大的元素和下标,将下标对应的元素从旧数组中取出依次存入新的数组中
复杂度 $O(n^2)$
1 |
|
快排
快排是一种使用分治策略的算法,分治思想又源于递归,于是先复习一点递归:
分治思想解决问题过程包括两个步骤:
- 找出基线条件
- 不断的将问题的规模进行分解
一个利用递归做列表求和的例子:
1 | def sum(arr): |
接下来开始快排:
1 | def quick_sort(arr): |
只用了 6 行,python 大法好呀,
归并
归并法也是分治思想的典型应用:将有序的子序列合并,得到完全有序的序列。
思路:充分利用 分治 的思想,先分后治,我觉得递归的思想适合人类的正常思维不太一样,所以有时候不要太抠细节。
想好两个条件:
- 基线条件:列表的长度等于 1 ,即长度为 1 的列表不要再次排序。
- 递归条件:不停的分解列表直至满足基线条件。
治 的过程只需要考虑对两个有序数组进行排序。
1 | def divide(arr): |