随机生成5000个整数,采用直接插入排序法进行排序;输入一个整数x,采用折半查找之,若存在,输出下标,否则输出-1.
#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;
void CreateNode(int *L)
{
int i;
srand((unsigned)time(NULL));
for(i=1;i<=5000;i++)
{
L[i]=rand()%100;
}
}//随机生成5000个整数
void INsertSort(int *L)
{
int i,t;
for(i=2;i<=5000;i++)
{
if(L[i]<L[i-1])
{
t=L[i];//将待插入的记录暂存到监视哨t中
L[i]=L[i-1];//L[i-1]后移
int j;
for(j=i-2;t<L[j];j--)//从后向前寻找插入位置
{
L[j+1]=L[j];//记录逐个后移,直到找到插入位置
}
L[j+1]=t;//将t即原L[i],插入到正确位置
}
}
}//对顺序表L做直接插入排序
int Search_Bin(int *L,int key)
{
int low,high,mid;
low=1;
high=5000;
while(low<=high)
{
mid=(low+high)/2;
if(key==L[mid])
return mid;
else if(key<L[mid])
high=mid-1;
else
low=mid+1;
}
return -1;
}//折半查找
int main(void)
{
int *L;
L=new int[5000];
CreateNode(L);
int i,key;
INsertSort(L);
cin>>key;
key=Search_Bin(L,key);
cout<<key<<endl;
for(i=1;i<=5000;i++)
{
cout<<L[i]<<" ";
}
cout<<endl;
delete L;
}