摘要:目錄簡單原理代碼實現簡單原理想必學過語言的各位都聽說過二分查找的算法,今天我就給各位萌新介紹一下二分查找的簡單原理和代碼實現。
想必學過C語言的各位都聽說過二分查找的算法,今天我就給各位萌新介紹一下二分查找的簡單原理和代碼實現。
我們使用數組的方式實現二分查找的目標,我們取一串有序數組的中間數組元素,再將此數組元素大小與查找數組比較,再判斷是否找到和下一查找區間。使用這種方式可以大大提高我們算法的效率,相比與遍歷數組的方法減少了查找次數,也減少了查找時間。下面我們介紹具體代碼實現。
我們先設置一個有序數組,如下所示
int arr[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13 };
接下來我們利用sizeof的方式算出數組長度大小,并且初始第一次查找的下標left和right(注意,最后一個數組下標為數組長度-1),如下圖所示
int sz = sizeof(arr) / sizeof(arr[0]); int left = 0; int right = sz - 1;
我們再設置一個mid值,作為與被查找數據比較的對象,我們在循環體中將這個值賦為(left+right)/2。重點!!重點!!重點!!我們將兩者比較后需要調整left和right的值。若查找數值與mid相等,則此mid下標就是需要查找數值的位置,若查找數值大于mid,我們將left重新賦值為mid+1,若查找數值小于mid,則將right賦值為mid-1,我們將此算法用在一個while循環中,若left<=right證明數組中還存在待查找元素,所以我們使用這一條件作為循環判斷條件。下面是全部代碼。
int main(){ int arr[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13 }; int sz = sizeof(arr) / sizeof(arr[0]); int left = 0; int right = sz - 1; int a = 0; int mid = 0; scanf("%d", &a); while (left <= right) { mid = (right + left) / 2; if (a > arr[mid]) left = mid + 1; if (a < arr[mid]) right = mid - 1; if(a==arr[mid]) { printf("找到了,下標是%d", mid); break; } } if (left > right) printf("找不到了"); return 0;}
感謝大家的閱讀,歡迎各位點贊評論,互關互助,有贊必回,祝各位萬事如意。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/124775.html
摘要:正文二分查找關于二分查找法二分查找法主要是解決在一堆數中找出指定的數這類問題。用二分查找法找尋上界與精確查找不同之處在于,精確查找分成三類大于,小于,等于目標數。 由一道題目引出的: 題目描述 給定一個有序的數組,查找某個數是否在數組中,請編程實現。 分析與解法 一看到數組本身已經有序,我想你可能反應出了要用二分查找,畢竟二分查找的適用條件就是有序的。那什么是二分查找呢? 二分查找可以...
摘要:對于大數據量,則可以用二分查找進行優化。有一個模塊,用于維護有序列表。和用于指定列表的區間,默認是使用整個列表。模塊提供的函數可以分兩類只用于查找,不進行實際的插入而則用于實際插入。 Python 的列表(list)內部實現是一個數組,也就是一個線性表。在列表中查找元素可以使用 list.index() 方法,其時間復雜度為O(n)。對于大數據量,則可以用二分查找進行優化。二分查找要求...
摘要:所以,二分查找較適用于一次排序,多次查找的數據。面對大量的數據,二分查找方能體現其優勢。 1. 二分查找的思想 二分查找是一種使用十分普遍的查找算法,其基本的思路也非常的簡單,在一個有序的數據集合中,我們想要查找某個數據,直接取最中間的那個數據,將它和要找的數據進行比較,如果較大,則在更大的那個數值區間繼續取中間值查找,反之亦然。 例如我們要在一個有序的集合里[1,3,5,6,7,8,...
閱讀 1397·2021-11-24 09:39
閱讀 3687·2021-11-24 09:39
閱讀 1859·2021-11-16 11:54
閱讀 1463·2021-09-30 09:47
閱讀 1712·2021-09-26 10:16
閱讀 2342·2021-09-22 15:33
閱讀 1453·2021-09-14 18:01
閱讀 2435·2021-09-07 09:59