求高人C++编程

来源:百度知道 编辑:UC知道 时间:2024/09/28 14:36:27
从键盘输入正整数n(5<n<20),然后接收键盘随机输入的n个整数(假设输入的n个整数
中没有相同的值, 且每个数的绝对值均不超过100),并将它们保存到一维数组中。将这n个
数用选择法升序排列。用折半查找法检索其中是否包含输入的整数x,如果数组中存在整数x,
则输出相应的元素下标,否则输出-1。

要求:
*)自己设计相关的函数:至少包括数组中数据的输入、输出、排序和检索
*)需要在排序前和排序后输出数组中的数据,以便对比检验
*)测试数据应该比较全面,至少包括找到和找不到两种情况
*)打印的源程序中必须以注释的方式给出自己的班级姓名和学号
*)程序必须是调试正确的,其中不得包括语法错误和逻辑错误

/*测试已通过
*/
#include <iostream>
using namespace std;

int Arr[20],num;

void imputArr(){
cout<<"要输入的整数个数n(5~20):"<<endl;
a: cin.clear();cin.sync();
cin>>num;
if(num>20||num<5){
cout<<"个数应在5~20之间,请重新输入:"<<endl;
goto a;
}
cout<<endl;
for(int i=0;i<num;i++)cin>>Arr[i];
}

void SelectionSort(){
int i,j,k,l;
for(i=0;i<num-1;i++){
k=i;
for (j=i+1;j<num;j++)
if(Arr[j]<Arr[i])k=j;
if(k!=i){
l=Arr[k];
Arr[k]=Arr[i];
Arr[i]=l;
}
}
}

int BinSearch(int t){
int left=0,right=num-1,mid;
while(left<=right){
mid=(left+right)/2;
if (t==Arr[mid])return mid;
if (t<Arr[mid])right=mid-1;
else left=mid+1;
}
return (-1);
}

void main(){
imputArr();