2019.4.27
阿新 • • 發佈:2019-04-27
align roo fir col har dem 步驟 void clas
1.數組中,元素的位置稱為索引
2.遞歸,調用棧。
發現還是不會寫hanoi。。:
1 #include<bits/stdc++.h> 2 using namespace std; 3 void hanoi(int n,char a,char b,char c){ 4 if(n==1) cout<<n<<":"<<a<<"-->"<<c<<endl; 5 else { 6 hanoi(n-1,a,c,b); 7 cout<<n<<"hanoi:"<<a<<"-->"<<c<<endl; 8 hanoi(n-1,b,a,c); 9 } 10 } 11 int main() 12 { 13 int n; 14 cin>>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 #include<bits/stdc++.h> 2 using namespace std; 3 void quicksort(vector<int> &num,int l,int r) 4 { 5 6 if(l>= r) return; 7 int i=l,j=r,x=num[l]; 8 while(i<j){ 9 while(i<j&&num[j]>=x) 10 j--; 11 if(i<j) 12 num[i++]=num[j]; //填坑之後再加 13 while(i<j&&num[i]<=x) 14 i++; 15 if(i<j) 16 num[j--]=num[i]; 17 } 18 num[i]=x; //把基準值放到i處 19 quicksort(num,l,i-1); //以i為中間值,排左右兩邊 20 quicksort(num,i+1,r); 21 } 22 int main() 23 { 24 int f[]={3,35,2,1,8,5,6,2,0}; 25 int len=sizeof(f)/sizeof(int); 26 /*前者是該int數組所占的內存總量(字節數),後者是單個int所占的內存, 27 合起來就是數組中元素的個數*/ 28 vector<int> num(f,f+len); 29 for(int k=0;k<num.size();k++) 30 cout<<num[k]<<" "; 31 cout<<endl; 32 quicksort(num,0,len-1); 33 for(int k=0;k<num.size();k++) 34 cout<<num[k]<<" "; 35 cout<<endl; 36 return 0; 37 38 }快排--填坑法
2019.4.27