递归和回溯
经典递归题目: 汉诺塔问题
1 #include2 using namespace std; 3 //x为起点,y为跳板,z为终点 4 void hannuota(int n,char x,char y,char z){ 5 if(n==1) 6 cout<<"从"< "到"< endl; 7 else 8 { 9 hannuota(n-1,x,z,y); 10 cout<<"从"< "到"< endl; 11 hannuota(n-1,y,x,z); 12 } 13 } 14 15 int main() { 16 int n; 17 char x='A',y='B',z='C'; 18 cout<<"请输入所需移动盘的个数"<<endl; 19 cin>>n; 20 hannuota(n,x,y,z); 21 return 0; 22 }
分治法入门之二分查找
/*分治法--二分查找*/ #includeusing namespace std; //数组不能为乱序,必须要递增或递减。要是有多个数相等的话就需要修改程序 //q为下界,p为上界 x为查找数 int a[10]={1,2,3,4,5,6,7,8,9,10}; int BinSearch(int q,int p,int x){ int k; k=(q+p)/2; if(q>p) return -1; if(x==a[k]) return k; if(xreturn BinSearch(q,k-1,x); if(x>a[k]) return BinSearch(k+1,p,x); } int main() { int w; int k; cout<<"输入需要查找的数"<<endl; cin>>w; k=BinSearch(0,9,w); cout< "是第"< 1<<"个数"<<endl; return 0; }
排序算法:
归并排序:
#includeusing namespace std; int A[10]={2,4,6,10,5,4,3,1,1,99}; void heb(int low,int mid,int high); void fenlei(int low,int high) { int mid; if(low<high) { mid=(low+high)/2; //计算中分点 fenlei(low,mid); //在前半段进行递归排序 fenlei(mid+1,high); //后半段进行递归排序 heb(low,mid,high); //排序 } } void heb(int low,int mid,int high){ int B[high]; int j,i,h,k; h=low;i=low;j=mid+1;//h为前半段数组的标志,j为后半段数组的标志,i用来记录存了多少数 while(h<=mid&&j<=high)//一个个进行比较 { if(A[h]<A[j]) { B[i]=A[h]; i++; h++; } else { B[i++]=A[j++]; } //前后两端进行比较,将小的那个丢在B里面 } //如果前半段有剩余的 if(h<=mid) { for(k=h;k<=mid;k++) B[i++]=A[k]; } else//如果后半段有剩余 for(k=j;j<=high;j++) B[i++]=A[k]; //将B中的都丢给A for(k=low;k<=high;k++) A[k]=B[k]; } int main() { int i; //这里可以适当改进,对数组进行操作 fenlei(0,10); for(i=0;i<10;i++) cout<endl; return 0; }
快速排序
#includeusing namespace std; int a[9]={2,4,6,10,5,4,3,1,1}; void swap(int &a,int &b){ int i; if(a>b) { i=a; a=b; b=i; } } void quicksort(int a[],int low,int high){ int i,j,k; k=a[low]; i=low;j=high; if(low>=high) { return; } while(low!=high) { while((low =k) high--; swap(a[low],a[high]); while(low k) low++; swap(a[low],a[high]); } quicksort(a,i,low-1);//前半段排序 quicksort(a,low+1,j); } int main() { int i; //这里可以适当改进,对数组进行操作 quicksort(a,0,9); for(i=0;i<9;i++) cout<endl; return 0; }
最后是一个能够快速调用排序的方法,不用一点一点的把代码写出来
导入头文件
#include#include using namespace std; bool com(int a,int b) { return a>b; } int main() { int i=0; int a[10]={5,9,3,1,4,8,2,3,9,44}; sort(a,a+10,com); for(i;i<10;i++) cout<endl; }