有15個數按由大到小順序存放在一個數組中,輸入一個數,要求用折半查找法找出該數是數組中第幾個元素的值。如果該數不在數組中,則輸出"無此數"


有15個數按由大到小順序存放在一個數組中,輸入一個數,要求用折半查找法找出該數是數組中第幾個元素的值。如果該數不在數組中,則輸出"無此數"

【答案解析】

二分查找是一個非常高效簡單的查找算法,筆試和面試中非常喜歡考察。

折半查找又叫二分查找,查找的前提是序列中元素必須有序,假設區間使用[left, right)標記,待查找元素為key,具體查找的方式如下:當區間[left, right)有效時循環進行一下操作

  1. 找到[left, right)區間中間位置
  2. 如果key等於中間位置元素,則找到,返回該元素在數組中的下標
  3. 如果key小於中間位置元素,到數組的左半側繼續二分查找
  4. 如果key大於中間位置元素,到數組的右半側繼續二分查找

如果循環結束時還沒有找到,則不存在該元素。

【代碼實現】

#include<stdio.h>
int main()
{
	int array[15] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14};
	int left = 0;
	int right = sizeof(array) / sizeof(array[0]);
	int key = 0;

	printf("請輸入要查找的數字: ");
	scanf("%d", &key);

	// 二分查找
	while (left < right)
	{
		// 找到中間位置
		int mid = left + ((right - left) >> 1);
		if (key == array[mid])
		{
			printf("%d\n", mid);
			break;
		}
		else if (key < array[mid])
		{
			right = mid;
		}
		else
		{
			left = mid + 1;
		}
	}

	if (left >= right)
		printf("無此數\n");
	return 0;
}

【結果截屏】

假設數組中元素為:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

有15個數按由大到小順序存放在一個數組中,輸入一個數,要求用折半查找法找出該數是數組中第幾個元素的值。如果該數不在數組中,則輸出"無此數"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



猜您在找 刪除數組元素 功能描述:有一個有序整數數組,要求輸入一個數字, 在數組中查找是否有這個數,如果有,將該數從數組中刪除, 要求刪除后的數組仍然保持有序; promise順序執行,返回結果存放在數組 寫幾個函數: ①輸人10個職工的姓名和職工號; ②按職工號由小到大順序排序,姓名順序也隨之調整; ③要求輸人一個職工號,用折半查找法找出該職工的姓名,從主函數輸人要查找的職工號,輸出該職工姓名。 定義一個含有30個整型元素的數組,按順序分別賦予從2開始的偶數;然后按順序每五個數求出一個平均值,放在另一個數組中並輸出 Leetcode練習(Python):第66題:給定一個由整數組成的非空數組所表示的非負整數,在該數的基礎上加一。 最高位數字存放在數組的首位, 數組中每個元素只存儲單個數字。 你可以假設除了整數 0 之外,這個整數不會以零開頭。 編一個程序,輸入10個整數,並放在數組中,先降序輸出全部的數,再統計並輸出當中正數、負數和零的個數 用指針編寫程序,把10個整數存放在一個一維數組中,將其中最小的數與第一個數對換,把最大的數與最后一個數對換 有一個已經排好序的數組,要求輸入一個數后,按原來順序的規律將它插入數組中 用C#設計控制台應用程序,輸入若干學生的英語和數學成績,求出總分,並按總分從高到低排序。要求設計一個學生類 Student,所有學生對象存放在一個 Student對象數組中,通過一個方法對其按照總分進行降序排序,最后輸出排序后的結果 (二分查找)輸出在數組中第一個大於等於查找值的位置,如果數組中不存在這樣的數,則輸出數組長度加一。
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM