1.数组中,元素的位置称为索引
2.递归,调用栈。
发现还是不会写hanoi。。:
1 #include2 using namespace std; 3 void hanoi(int n,char a,char b,char c){ 4 if(n==1) cout< <<":"< <<"-->"< < "< < >n;15 hanoi(n,'a','b','c');16 17 }
3.分治:
▲步骤:1)找出基线条件(尽可能简单)
2)不断将问题分解(缩小规模),直至符合基线条件。
▲证明欧几里得算法(辗转相除法):
https://zh.khanacademy.org/computing/computer-science/cryptography/modarithmetic/a/the-euclidean-algorithm
【
To prove that GCD(A,B)=GCD(B,R) we first neec GCD(A,B)=GCD(B,A-B).
Proof that the GCD(A,B) evenly dividesC .
Proof that the GCD(B,C) evenly dividesA
GCD(A,B)=GCD(B,A-B)
GCD(A,B)=GCD(A-B,B)=GCD(A-2B,B)
GCD(A,B)=GCD(B,R)
】
▲排序(以下都按从小到大):
1)冒泡排序:从左到右,数组中相邻的两个元素进行比较,将较大的放到后面。 // O(n^2)
2)选择排序:从左到右,一个元素与他下面所有元素比较,找出最小的,和那个元素互换,开始下一轮。 // O(n^2)
3)快排:找基准数,左右两边放小于等于和大于,再递归。
1 #include2 using namespace std; 3 void quicksort(vector &num,int l,int r) 4 { 5 6 if(l>= r) return; 7 int i=l,j=r,x=num[l]; 8 while(i =x)10 j--;11 if(i