1、直接插入排序 def insert_sort(alist): """插入排序""" n = len(alist) for j in range(1,n): i = j while i > 0: if alist[i] < alist[i-1]: alist[i],alist[i-1] = ali ...
分类:
编程语言 时间:
2020-02-20 13:19:44
阅读次数:
75
分治与汉诺塔 分治算法 分治算法介绍 分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排 ...
分类:
其他好文 时间:
2020-02-20 10:12:53
阅读次数:
62
模 $|(x,y)|=\sqrt{x^2+y^2}$ 点积 $(ax,ay) (bx,by)=ax bx+ay by$ 叉积 $(ax,ay)\times(bx,by)=ax by ay bx$ 夹角 $$表示从$\vec a$逆时针旋转到$\vec b$的角度。 $\cos=\frac{\vec ...
分类:
其他好文 时间:
2020-02-19 21:12:44
阅读次数:
90
归并排序是一种非常经典的分治算法,也是非常精美的算法。学习归并排序,对于理解分治法思想、提高算法思维能力十分有帮助。 ...
分类:
编程语言 时间:
2020-02-19 13:15:19
阅读次数:
83
归并排序 1. 算法推导 对一个等待排序的数组A,以及排序函数sort,以及合并两个有序数组的函数merge。则 sort(A) = merge(sort(A1), sort(A2)),上面这个推导公式看起来是满足递归算法的重复条件。举个例子: 2. 代码实现 2.1 递归实现 2.2 非递归实现 ...
分类:
编程语言 时间:
2020-02-18 14:57:50
阅读次数:
74
归并排序其实也是分治的思想 首先归并排序跟快排一样同样需要考虑分界点 归并排序的分界点都是取中间值 其次归并排序需要递归排序左边和右边 最后一部也是最难的一部需要将分开的归并排序合二为一 #include<iostream> using namespace std; int n; const int ...
分类:
编程语言 时间:
2020-02-18 09:39:10
阅读次数:
88
https://www.runoob.com/w3cnote/radix-sort.html 算法系列 1.0 十大经典排序算法 1.1 冒泡排序 1.2 选择排序 1.3 插入排序 1.4 希尔排序 1.5 归并排序 1.6 快速排序 1.7 堆排序 1.8 计数排序 1.9 桶排序 1.10 基 ...
分类:
编程语言 时间:
2020-02-17 12:27:17
阅读次数:
57
只讲众多排序算法中的一小撮,也是最经典的、最常用的:冒泡排序、插入排序、选择排序、归并排序、快速排序、计数排序、基数排序、桶排序。 ...
分类:
编程语言 时间:
2020-02-16 16:30:07
阅读次数:
77
在递归函数中用到的变量,要将它声明为局部变量,切记不能声明为全局变量。 如下面归并排序中的变量k。 1 #include<iostream> 2 3 using namespace std; 4 5 const int N = 100010; 6 7 int a[N],b[N]; 8 9 int n ...
分类:
其他好文 时间:
2020-02-16 16:26:44
阅读次数:
77