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