zoukankan      html  css  js  c++  java
  • 二分查找算法(汉诺塔算法),归并排序

    二分查找算法(汉诺塔算法)

    #include<stdio.h>

    #include<stdlib.h>

    int pickTopDisk(char *current,char x);

    void hanoi(char *current,int n,char A,char B,char C);

    int main()

    {

    char current[]={'A','A','A','A'};

    char A='A',B='B',C='C';

    hanoi(current,4,A,B,C);

    return 0;

    }

    int pickTopDisk(char *current,char x)

    {

    int i=0;

    while (current[i]!=x)

    i++;

    return i;

    }

    void hanoi(char *current,int n,char A,char B,char C)

    {

    static int count=0;

    int i=0;

    if(n==1)

    {

    i=pickTopDisk(current,A);

    current[i]=C;

    count++;

    printf("move %d disk %d: %c->%c ",count,n,A,C);

    return;

    }

    hanoi(current,n-1,A,C,B);

    current[n-1]=C;

    count++;

    printf("move %d disk %d: %c->%c ",count,n,A,C);

    hanoi(current,n-1,B,A,C);

    }

     

    归并排序

    #include <stdio.h>

    //将有序的SR[i...m]SR[m+1...n]归并为有序的TR[i...n]

    void Merge(int SR[], int TR[], int i, int m, int n)

    {

    int j,k;

    j = m+1;

    k = i;

    while(i<=m && j<=n)

    if(SR[i]<=SR[j])

    TR[k++] = SR[i++];

    else

    TR[k++] = SR[j++];

    while(i<=m)

    TR[k++] = SR[i++];

    while(j<=n)

    TR[k++] = SR[j++];

    }

     

    //SR[s...t]归并排序为TR1[s...t]

    void MSort(int SR[], int TR1[], int s, int t)

    {

    int m;

    int TR2[10];

    if(s == t)

    TR1[s] = SR[s];

    else

    {

    m = (s+t)/2; //SR[s...t]平分为SR[s...m]SR[m+1...t]

    MSort(SR,TR2,s,m);//递归地将SR[s...m]归并为有序的TR2[s...m]

    MSort(SR,TR2,m+1,t); //递归地将SR[m+1...t]归并为有序的TR2[m+1...t]

    Merge(TR2,TR1,s,m,t); //TR2[s...m]TR2[m+1...t]归并到TR1[s...t]

    }

    }

     

    //主函数,调用归并排序MSort

    void main()

    {int i;

    int s[10] = {2,6,7,4,5,10,9,1,3,8};

    printf("输出这个数组: ");

    for(i=0;i<10;i++)

    printf("%d ",s[i]);

    printf(" ");

    MSort(s,s,0,9);

    printf("输出经过归并排序后的数组: ");

    for(i=0;i<10;i++)

    printf("%d ", s[i]);

    printf(" ");

    }

     

     

    #include <iostream>

    #include <stdlib.h> // srand() 以及 rand()

    #include <time.h> // time()

    using namespace std;

    int partion(int a[],int p,int r){

        //rand

        srand((unsigned)time( NULL));

        int e=rand()%(r-p+1)+p;

        int tem;

        tem=a[e];

        a[e]=a[r];

        a[r]=tem;

        int x=a[r], i=p-1;

        for (int j=p;j<r;j++){ 

            if (a[j]<=x){

                tem=a[i+1];

                a[i+1]=a[j];

                a[j]=tem;

                i++;

            }

        }

        tem=a[r];

        a[r]=a[i+1];

        a[i+1]=tem;

        return i+1;

    }

     

    void QuickSort(int a[],int p,int r){

        if (p<r){

            int q=partion(a,p,r);

            QuickSort(a,p,q-1);

            QuickSort(a,q+1,r);

        }

    }

     

    int main(){

        int array[]={0,-2,11,-4,13,-5,14,-43};

        QuickSort(array,0,7);

    cout<<"输出这组数"<<endl;

        for(int i=0;i<=7;i++)

    {

    cout<<array[i]<<" ";

     

    }

    cout<<endl;

        return 0;

    }

     

     

     

     

     

     

  • 相关阅读:
    Windows Phone 独立存储资源管理器工具
    Windows Phone 选择器
    Windows Phone 启动器
    Windows Phone 8 ControlTiltEffect
    ActivatedEventArgs.IsApplicationInstancePreserved 属性
    HttpWebRequest BeginGetResponse EndGetResponse
    python并发编程-进程间通信-Queue队列使用-生产者消费者模型-线程理论-创建及对象属性方法-线程互斥锁-守护线程-02
    python并发编程-进程理论-进程方法-守护进程-互斥锁-01
    python网络编程-socket套接字通信循环-粘包问题-struct模块-02
    python网络编程-异常处理-异常捕获-抛出异常-断言-自定义异常-UDP通信-socketserver模块应用-03
  • 原文地址:https://www.cnblogs.com/zhangaihua/p/3718098.html
Copyright © 2011-2022 走看看