排序与折半查找
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验5 排序与折半查找
实验人:叶展望学号:Xb14680101 时间:12.21
一、实验目的:
1.掌握顺序查找、折半查找算法的思想及高级语言程序实现方法;
2.掌握插入类排序的思想及程序实现方法。
二、实验内容:
对已给出的关键字序列进行排序后,在折半查找某关键字值。
三、实验步骤:
从键盘输入若干关键字值(可以是整数),然后对它们采用一趟直接插入排序后,输入待查找的数,查找成功返回该数的位置、查找失败返回错误信息。
四、主程序代码
#include
#define LENGTH 10
int source[LENGTH] = {10,12,28,37,54,65,69,86,90,98};
//二分查找,查找key在原始数据a中的位置
int BinarySearch(int a[],int n,int key){
int low,high,mid;
low = 0;
high = n-1;
while(low<=high){
mid = (low + high)/2; //每次让中间数取最小和最大的中间
if(a[mid] == key) //查找的元素正好等于中间值
return mid;
else if(key < a[mid]) //查找的元素小于中间值,在最小值和上次中间值范围内查找
high = mid - 1;
else
low = mid + 1; //查找的元素大于中间值,在中间值和最大值范围查找
}
return -1;
}
int main(){
int i,key,pos;
printf("原始数据:\n");
for(i = 0 ; i < LENGTH ; i++)
printf("%d ",source[i]);
printf("\n请输入要查找的数据:");
scanf("%d",&key);
pos = BinarySearch(source,LENGTH,key);
if(pos > -1)
printf("\n查找成功,查找元素位于第 %d 个",pos); else
printf("\n查找失败");
}