数据结构-查找(C语言)——折半(二分)查找代码篇

该博客介绍了如何在已排序的C语言数组中使用折半(二分)查找算法来找到元素的位置。当元素不在数组中时,算法返回小于元素的最大值位置和大于元素的最小值位置。文章分析了7种不同算法的正确性和可能存在的问题,其中第5个算法被证明是正确的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<stdio.h>
#define MAXSIZE 30
typedef struct
{
   
   
	int key;//int为关键字key的数据类型 
	char data;//其他数据 
}SeqList;//顺序表元素类型

int BinSearch(SeqList R[],int n,int k)//折半查找(二分)
{
   
   
	int low=0,high=n-1,mid;
	while(low<=high)//查找区间最左记录的位置low小于等于最右记录的位置high 
	{
   
   
		mid=(low+high)/2;//mid取该查找区间的中间的记录位置 
		if(R[mid].key==k)//当中间关键字和k相同时 
		   return mid;//查找成功 
		else
		   if(R[mid].key>k)
		      high
### C语言中的冒泡排序和折半查找 #### 冒泡排序的实现 在C语言中,可以通过如下方式来实现冒泡排序算法: ```c void BubbleSort(int* a, int n) { int end = 0; for (end = n - 1; end >= 0; end--) { int exchange = 0; // 记录该趟冒泡排序是否进行过交换 int i = 0; for (i = 0; i < end; i++) { if (a[i] > a[i + 1]) { Swap(&a[i], &a[i + 1]); exchange = 1; } } if (exchange == 0) // 如果某一轮遍历没有发生任何交换,则说明数组已经有序 break; } } ``` 此段代码实现了经典的冒泡排序逻辑[^3]。 为了使上述`Swap`函数正常工作,还需要定义它。这里提供了一个简单的整数交换函数作为补充: ```c void Swap(int* xp, int* yp) { int temp = *xp; *xp = *yp; *yp = temp; } ``` #### 折半查找二分查找) 对于折半查找,在一个预先排好序的数组上执行效率较高。以下是其基本实现方法: ```c int BinarySearch(int arr[], int l, int r, int x) { while (l <= r) { int m = l + (r - l) / 2; // Check if x is present at mid if (arr[m] == x) return m; // If x greater, ignore left half if (arr[m] < x) l = m + 1; // If x smaller, ignore right half else r = m - 1; } // If we reach here, then element was not present return -1; } ``` 这段代码展示了如何在一个升序排列好的数组里通过不断缩小范围来进行高效的目标值定位操作[^4]。 需要注意的是,当使用这些功能时,应该先确保待处理的数据集已经被适当初始化并满足相应条件——比如用于折半查找前要保证输入序列是经过排序后的版本;而针对较大规模数据集则可能要考虑内外存交互的影响因素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值