您的位置:首页 > 其它

排序和二分查找题

2018-03-23 14:46 316 查看
题目:

输入一段不定长度的数字(各不相同),要求输入一个查找数字,如果在第一次输入中存在则输出其在数组中的位置,如果不存在则输出按从小到大排序存储在数组的位置;

结果要求:

输入:

4 {1 3 5 4} 2

6 {7 3 4 9 10 5} 9

输出:

1

4

我的程序:

#include <iostream>
using namespace std;

int main(int argc, char const *argv[])
{
int k;
cin>>k;
int array[k];
cin>>array[0];
for (int i = 1; i < k; ++i)
{
cin>>array[i];
if(array[i]<array[i-1])
{
int temp =array[i];
array[i] =array[i-1];
array[i-1] =temp;
continue;
}
if(array[i]==array[i-1])
{
cout<<"Same!"<<endl;
}
}
int target;
cout<<"What is your number?"<<endl;
cin>>target;
int left =0,right =k-1;
while(left<=right)
{
int mid =(left+right)/2;
if(array[mid] == target) {cout<<mid<<endl;break;}
if(array[left] == target) {cout<<left<<endl;break;}
if(array[right] == target) {cout<<right+1<<endl;break;}
if(array[mid] > target) {right =mid-1;continue;}
if(array[mid] < target) {left =mid+1;continue;}
if(target >array[mid] && target <array[mid+1]) {cout<<mid+1<<endl;break;}
}
return 0;
}


结果:



错误教训:



left ==right 还会进行迭代

修正好的程序:

#include <iostream>
using namespace std;

int main(int argc, char const *argv[])
{
int k;
cin>>k;
int array[k];
cin>>array[0];
for (int i = 1; i < k; ++i)
{
cin>>array[i];
if(array[i]<array[i-1])
{
int temp =array[i];
array[i] =array[i-1];
array[i-1] =temp;
continue;
}
if(array[i]==array[i-1])
{
cout<<"Same!"<<endl;
}
}
int target;
cout<<"What is your number?"<<endl;
cin>>target;
int left =0,right =k-1;
while(left<=right)
{
int mid =(left+right)/2;
if(array[mid] == target) {cout<<mid<<endl;break;}
if(array[left] == target) {cout<<left<<endl;break;}
if(target >array[mid] && target <array[mid+1]) {cout<<mid+1<<endl;break;}
if(array[right] == target) {cout<<right+1<<endl;break;}
if(array[mid] > target) {right =mid-1;continue;}
if(array[mid] < target) {left =mid+1;continue;}

}
return 0;
}


结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: