#include<stdio.h> int BinSearch(int r[],int n,int k) { int mid,low=0,high=n-1; while(low<=high) { mid=(low+high)/2; if(k<r[mid]) high=mid-1; else if(k>r[mid]) low=mid+1; else return mid+1; } return 0; } int main() { int n=9,k=22; int r[]={98,86,75,64,55,48,37,22,13}; int num; num=BinSearch(r,n,k); printf("%d",num); return 0; }
时间: 2024-04-06 21:33:53 浏览: 11
这段代码实现了一个二分查找算法。该算法的目的是在已排序的数组 r[] 中查找值为 k 的元素,若找到则返回其下标加一,否则返回 0。
具体实现过程为:首先将查找区间的下界 low 设为 0,上界 high 设为 n-1,表示待查找的区间为 [0,n-1]。然后在每次循环中,计算中间位置 mid,若 k 小于 r[mid],则说明待查找元素在区间 [low,mid-1] 中,将 high 更新为 mid-1;若 k 大于 r[mid],则说明待查找元素在区间 [mid+1,high] 中,将 low 更新为 mid+1;否则,即 k 等于 r[mid],则找到了该元素,返回其下标加一,即 mid+1。
最后,如果循环结束时仍未找到元素,则返回 0。
相关问题
改变以下代码变量名使代码重复率降低的同时保留代码原理与功能,#include <stdio.h> #include <stdlib.h> int BinSearch(int R[], int n, int k) { int low=0,high=n-1,mid,count=0; while(low<=high) { mid=(low+high)/2; printf("第%d次查找:在[ %d ,%d]中找到元素R[%d]:%d\n ",++count,low,high,mid,R[mid]); if(R[mid]==k) return mid; if(R[mid]>k) high=mid-1; else low=mid+1; } return -1; } int main() { int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int k, loc; printf("Please input your number: \n"); scanf("%d", &k); loc=BinSearch(a, 10, k); if(loc == -1) printf("not find!"); return 0; }
#include <stdio.h>
#include <stdlib.h>
int binarySearch(int arr[], int size, int key) {
int low = 0, high = size - 1, mid, count = 0;
while(low <= high) {
mid = (low + high) / 2;
printf("The %d time searching: Find element arr[%d]: %d in [%d, %d]\n", ++count, mid, arr[mid], low, high);
if(arr[mid] == key)
return mid;
if(arr[mid] > key)
high = mid - 1;
else
low = mid + 1;
}
return -1;
}
int main() {
int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int key, index;
printf("Please enter a number: \n");
scanf("%d", &key);
index = binarySearch(arr, 10, key);
if(index == -1)
printf("Not found!\n");
return 0;
}
#include <stdio.h> #define MAXSIZE 100 typedef int KeyType; //根据需要设定数据类型 typedef struct { KeyType key; //关键字字段 }ElemType; typedef struct { ElemType r[MAXSIZE]; int length; // 表的长度 } SSTable; int BinSearch(SSTable t,int n,int k) //拆半
查找算法的实现代码如下:
int BinSearch(SSTable t, int n, int k) {
int low = 0, high = n - 1, mid;
while (low <= high) {
mid = (low + high) / 2;
if (t.r[mid].key == k) {
return mid;
} else if (t.r[mid].key > k) {
high = mid - 1;
} else {
low = mid + 1;
}
}
return -1;
}
这段代码实现了在一个静态有序表t中查找关键字为k的元素,如果找到了则返回该元素的位置,否则返回-1。其中,n表示表t的长度,k为待查找的关键字。