C語言編程 在整型有序數組中查找想要的數字並且返回下標
阿新 • • 發佈:2019-03-28
sys 利用 alt 一個 ret 結果 c99 輸入 中間 遇到“有序”數組中查找元素類的題,優先考慮折半查找(二分查找)
做法核心是利用所定義的下標left和right與mid(由計算得來)下標的比較來逐漸縮短查找範圍,達到一個閾值後即為找到。
源代碼如下:
#include<stdio.h> #include<stdlib.h> int search(int a[], int x, int left, int right)//定義二分查找函數 { while (left <= right) { int mid = (left + right) / 2;//計算當前查找範圍中間元素的下標 if (x < a[mid]) { right = mid - 1;//若在中間元素的左邊則移動right下標 } if (x>a[mid]) { left = mid + 1;//若在中間元素的右邊則移動left下標 } else { return mid;//說明找到元素 } } return 0; } int main() { int i, m, n; int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };//可事先定義也可讓用戶輸入 int left = 0, right = sizeof(a) / sizeof(a[0]); printf("請輸入你要查找的數字:\n"); scanf("%d", &n); m = search(a, n, left, right); if (m) { printf("找到了,下標為%d\n",m); } else printf("找不到\n"); system("pause"); return 0; }
運行結果:
C語言編程 在整型有序數組中查找想要的數字並且返回下標