二分查找算法(汉诺塔算法),归并排序

原创 2013年12月05日 10:30:11

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

#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\n",count,n,A,C);

return;

}

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

current[n-1]=C;

count++;

printf("move %d disk %d: %c->%c\n",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("输出这个数组:\n");

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

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

printf("\n");

MSort(s,s,0,9);

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

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

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

printf("\n");

}

 

 

#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;

}

 

 

 

 

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

算法学习-归并排序和二分查找

算法学习-归并排序和二分查找 一:归并排序 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 算法...

递归算法——归并排序,快速排序,二分查找

/* * 待排序的数组,算法输入 */ int arrIntegers[10] = { 0, 3, 1, 2, 5, 4, 8, 7, 9, 6 }; /* ...

c语言快速排序与二分查找算法

#include int r[20]; int Quick_Partition(int r[],int a,int b); int Binary_serch(int r[],int key,int n...

查找算法总结:顺序查找,二分查找,分块查找,散列查找,二叉排序树查找

查找算法包括:顺序查找,二分查找,分块查找,散列查找,二叉排序树查找,B树 B树用于查找磁盘数据,这里不进行分析顺序查找思想:从头到尾一个一个比较,简单,时间复杂度O(n)java实现:public...

Python实现冒泡排序、选择排序、插入排序、快速排序、归并排序、二分法查找算法(基于《算法导论》伪代码)

为加深对各种基础排序算法的理解,我基于Thomas H. Cormen等《算法导论》中的伪代码,用Python实现了冒泡排序、选择排序、插入排序、快速排序、归并排序、二分法查找算法。 具体算法如下...

二分查找算法

  • 2012-07-29 10:25
  • 683KB
  • 下载

二分查找算法的C语言版

  • 2011-02-18 21:30
  • 678B
  • 下载

基础排序算法与二分查找算法Java版本(下)

/** * Created by Alvin on 15/11/11. */ public class Sort {public static void swap(int[] temp ,i...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)