排序和二分查找题
2018-03-23 14:46
316 查看
题目:
输入一段不定长度的数字(各不相同),要求输入一个查找数字,如果在第一次输入中存在则输出其在数组中的位置,如果不存在则输出按从小到大排序存储在数组的位置;
结果要求:
输入:
4 {1 3 5 4} 2
6 {7 3 4 9 10 5} 9
输出:
1
4
我的程序:
结果:
错误教训:
left ==right 还会进行迭代
修正好的程序:
结果:
输入一段不定长度的数字(各不相同),要求输入一个查找数字,如果在第一次输入中存在则输出其在数组中的位置,如果不存在则输出按从小到大排序存储在数组的位置;
结果要求:
输入:
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; }
结果:
相关文章推荐
- 二分查找 归并排序 快排 详解C++
- 经典算法:二分查找、插入排序、选择排序、冒泡排序
- 【数据结构】选择排序和二分查找
- 数组排序、求最值、二分查找
- 排序列表转换为二分查找树
- CF - 580B. Kefa and Company - 排序+暴力+二分查找上界
- 冒泡排序,选择排序,二分查找小结
- 插入排序的改进版本(二分查找)
- javascript 二分查找排序
- python中实现二分查找,插入排序,归并排序,快速排序
- 温故而知新-java排序与二分查找
- LintCode 排序列表转换为二分查找树
- 基数排序 二分查找 车牌号
- 优化的直接插入排序(二分查找插入排序,希尔排序)
- 二分查找——数字在排序数组中出现的次数
- 随机生成1024个数,用指针进行排序,并实现二分查找
- Message Flood 【排序--二分查找】
- LintCode-排序列表转换为二分查找树
- C语言 数据结构之排序与查找 数据结构实验之查找四:二分查找
- 各种排序方法(冒泡,快速,插入,选择),二分查找