二分搜索.合并排序

二分搜索

// 二分搜索.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;
}

合并排序

// 合并排序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;
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值