今天刷洛谷的时候,刷到一道二分搜索的题。我现场写了一个代码,结果一直RunTimeError。我迫不得已去看了以前的笔记,发现每次循环结束后要将left=mid+1或right=mid-1而不是单纯的left=mid或right=mid。然后我突发奇想,能不能用scratch也做一个二分呢?说干就干!
首先定义变量&数组并输入
变量:
数组(列表):
然后初始化&输入:
然后就是二分的主框架:
这里附上c++源代码:
#include<bits/stdc++.h>
using namespace std;int arr[1005]
int main()
{int ans,num;cin >> num >> ans;for(int i=1;i<=n;i++){cin >> arr[i];}sort(a+1,a+1+n,greater<int>());//如果使用万能头则不额外添加头文件,否则需要添加algorithm头文件while(l<=r){int left=1,right=n+1,mid;mid = (left+right)/2;if(arr[mid]==ans){cout << mid << endl;return 0;}else if(arr[mid]<ans){left = mid+1;}else{right = mid-1;}}system("pause");return 0;
}
ps:
1.二分查找的前提时数组有序,这里由于scratch没有对应的排序函数小编不想再写排序代码,所以请大家输入 时一定要进行有序输入
2.如有不当之处,敬请指正
3.源文件地址:点我!