这篇文章用两种方法写出两个代码:在一个有序数组查出具体值
分别是
①一般方法书写
②折半查找法/二分查找法
一、一般方法代码书写
#include <stdio.h>
int main()
{char arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 0;
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
scanf("%d", &k);
for (i = 0; i < sz; i++)
{
if (arr[i] == k)
{
printf("找到了,下表为;%d", i);
break;
}
}
if(arr[i]!=k)
printf("没找到");
return 0;
}
运行结果;
二、折半查找法/二分查找法
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序储存结构,而且表中元素按关键字有序排列。
1、查找原理:首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
2、代码书写:
#include <stdio.h>
int main()
{
int arr[] = { 1,2.,3,4,5,6,7,8,9,10 };
int k = 0;
int sz = sizeof(arr) / sizeof(arr[0]);//计算元素个数
int left = 0;//左下标;
int right = sz - 1;//右下标
scanf("%d", &k);
while (left <= right)///首先左下标left小于右下标right,在查找过程中left用
//mid+1赋值,right用mid-1赋值,一旦出现left>right,说明没有找到所要找的值。
{
int mid = (left + right) / 2;
if (arr[mid] > k)
{
right = mid - 1;//重新定右下标
}
else if (arr[mid] < k)
{
left = mid + 1;//重新定左下标
}
else
{
printf("找到了,下标为:%d", mid);
break;
}
}
if(left>right)
{
printf("没找到\n");
}
return 0;
}
运行结果: