zoukankan      html  css  js  c++  java
  • 递归和回溯

      经典递归题目:  汉诺塔问题

      

     1 #include <iostream>
     2 using namespace std;
     3 //x为起点,y为跳板,z为终点 
     4 void hannuota(int n,char x,char y,char z){
     5     if(n==1)
     6         cout<<""<<x<<""<<z<<endl;
     7     else
     8         {
     9             hannuota(n-1,x,z,y); 
    10             cout<<""<<x<<""<<z<<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 }
    View Code

      分治法入门之二分查找

     
    /*分治法--二分查找*/
    #include<iostream>
    using 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(x<a[k])    return 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<<w<<"是第"<<k+1<<"个数"<<endl; 
        return 0;
    }
    View Code

      排序算法:

          归并排序:

            

    #include<iostream>
    using 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<<A[i]<<endl;
        return 0;
    }
    View Code

          快速排序

        

    #include<iostream>
    using 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<high)&&a[high]>=k)
                high--;
            swap(a[low],a[high]);
            while(low<high&&a[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<<a[i]<<endl;
        return 0;
    }
    View Code

       最后是一个能够快速调用排序的方法,不用一点一点的把代码写出来

        导入头文件<algorithm>使用sort排序

    #include<iostream>
    #include<algorithm>
    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<<a[i]<<endl;
    }
    View Code
  • 相关阅读:
    iframe嵌套
    fiddler——一款莱斯的抓包工具
    工程代码规范和更新规范
    新项目新工作空间新仓库新setting文件
    quartz-job实现实时或定时发送短信任务
    quartz-job实现定时任务配置
    quartz开源作业调度框架的配置
    Confluence 6 让一个空间可以公众访问
    Confluence 6 管理和恢复空间管理权限
    Confluence 6 指派和撤销空间权限
  • 原文地址:https://www.cnblogs.com/printwangzhe/p/12313966.html
Copyright © 2011-2022 走看看