习题 6.9 有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。

xiaoxiao2021-02-28  147

C程序设计 (第四版) 谭浩强 习题6.9 个人设计

习题 6.9 有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。

代码块

方法1:

#include <stdio.h> #include <stdlib.h> int main() { int a[15] = {99, 97, 87, 76, 65, 63, 59, 58, 51, 43, 32, 31, 28, 15, 6}; int x, low, high, mid, n; n = 15; low = 0; high = n - 1; scanf("%d", &x); while (low <= high){ mid = (low + high) / 2; if (x > a[mid]) high = mid - 1; else if (x < a[mid]) low = mid + 1; else if (x == a[mid]){ printf("%d is %dth number!\n", x, mid+1); break; } } if (x != a[mid]) printf("No match!\n"); system("pause"); return 0; }

方法2:

#include <stdio.h> #include <stdlib.h> int main() { int n[15] = {99, 97, 87, 76, 65, 63, 59, 58, 51, 43, 32, 31, 28, 15, 6}; int num, low, high, mid; for (low=0, high=14, printf("Please enter number: "), scanf("%d", &num); low<=high;){ mid=(low+high)/2; if (num>n[mid]) high=mid-1; else if (num<n[mid]) low=mid+1; else{ printf("%d is No.%d number!\n", num, mid+1); break; } } if (num!=n[mid]) printf("No match!\n"); system("pause"); return 0; }
转载请注明原文地址: https://www.6miu.com/read-74667.html

最新回复(0)