1. 程式人生 > >[日常練習] 8. 基於有序陣列指定元素的二分查詢C語言實現

[日常練習] 8. 基於有序陣列指定元素的二分查詢C語言實現

問題描述:

採用折半(二分)查詢的方式,在整型有序陣列中查詢想要的數字,找到了返回下標,找不到返回-1。

問題分析及原始碼:

有序陣列它的關鍵就是陣列下標最小值及最大值,二分查詢就是針對有序陣列最為簡單的一種查詢方式。關鍵注意迴圈的建立及跳出條件,當左側left都以經大於右側right時,宣告查詢完畢!原始碼及結果如下:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int my_search(int arr[], int key, int left, int right) //引數為陣列、查詢元素、陣列下標最小值、陣列下標最大值 
{
	while (left <= right) {                        //當left已經超過right時,及陣列元素已經被找到了
		int mid = (right + left) / 2;
		if (key < arr[mid]) {                  //判定所查詢元素是否在左半邊
			right = mid - 1;	       //若是,則縮小分割槽範圍
		}
		else if (key > arr[mid]) {             //判定所查詢元素是否在右半邊
			left = mid + 1;		       //若是,則縮小分割槽範圍
		}
		else {
			return mid;
		}
	}
	return -1;
}

int main()
{
	int key = 6;
	int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	int ret = my_search(arr, key, 0, 9);
	if (ret == -1) {
		printf("沒找到\n");
	}
	else {
		printf("%d\n", ret);
	}
	system("pause");
	return 0;
}
	{
		printf("%d\n", ret);
	}
	system("pause");
	return 0;
}

結果滿足預期,成功!注意這種折中查詢的演算法應用、思想,尤其是迴圈的條件及左右參值的改變情況即要求!