书本的算法2

来源:互联网 发布:无法无天 吾知 下载 编辑:程序博客网 时间:2024/06/11 02:04

p4二分搜索

// 二分搜索.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<iostream>
using namespace std;

void binarysearch(int *p,int n,int x)
{
 int low,high,j,mid;
 low=1;
 high=n;
 j=0;
 while(low<=high)
 {
  if(j!=0) break;
  mid=(low+high)/2;
  if(x==p[mid]) j=mid;
  else if(x<p[mid]) high=mid-1;
  else low=mid+1; 
 }
 if(j!=0) cout<<p[j]<<endl;
 else cout<<"搜索不到"<<endl;
}


int main(int argc, char* argv[])
{
 int num,s,final;
 int *q=new int [num];
 cout<<"请输入元素的个数"<<endl;
 cin>>num;
 cout<<"请按升序输入num个元素"<<endl;
 for(int i=1;i<=num;i++) cin>>q[i];
 cout<<"请输入要搜索的元素 s"<<endl;
 cin>>s;
    binarysearch(q,num,s);
return 0;
}

p6合并排序

// 合并排序2.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<iostream>
using namespace std;

void Merge(int *c,int *d,int l,int m,int r)
{
 //合并c[1,m]和c[m+1,r]到d[1:r]
 int i=l,j=m+1,k=l;
 while( (i<=m) && (j<=r) )
     if(c[i]<=c[j]) d[k++]=c[i++];
  else d[k++]=c[j++];
 if(i>m) for( int q=j;q<=r;q++) d[k++]=c[q];
 else for(int q=i;q<=m;q++) d[k++]=c[q];

 for(int v=l;v<=r;v++)
  cout<<d[v]<<" ";
}

 


int main(int argc, char* argv[])
{
 //cout<<"真慢"<<endl;
 int A[100],B[100];
 int num1,num2;
// int *B=new int [num1+num2];

 cout<<"请输入第一个子数组的元素的个数"<<endl;
 cin>>num1;
 cout<<"请按升序输入第一个数组的元素"<<endl;
 for(int i=1;i<=num1;i++) cin>>A[i];


 cout<<"请输入第二个子数组的元素的个数"<<endl;
 cin>>num2;
 cout<<"请按升序输入第二个数组的元素"<<endl;
 for(int j=num1+1;j<=num1+num2;j++) cin>>A[j];

   Merge(A,B,1,num1,num1+num2);


 return 0;
}