折半查詢思想及實戰程式設計

2021-10-09 05:00:25 字數 1624 閱讀 3038

1.折半查詢要求是陣列是有序為前提(如果不是有序的不能使用)

2.提及查詢存在兩種情況,要麼資料存不存在要麼存在下標是多少

下面講解折半查詢的思想

首先定義乙個有序陣列

int array[10]

=;1-

10一共有10個資料,將這10個數進行編號,從0開始編號,即0-9;

令left=

0,right=

9,mid=

(left+right)

/2,idx=-1

;idx是什麼?

idx就是當進行查詢以後如果沒有資料的話,那麼這個值永遠就是-

1,如果查詢到資料的話就將mid的值賦給idx。

基本工作做好了以後,現在假設我要查詢9這個數,下面講如何折半查詢

1.計算mid

(一半)的值

這裡mid=

(left+right)/2

=(0+

9)/2

=42.比較array[mid]的值和所要查詢的資料進行比較大小

這裡array[4]

=5<

9,所以將array[

4]左邊的所有資料全部拋棄(包括array[4]

),然後令left=mid+

13.計算新的mid

(一半)的值

這裡mid=

(left+right)/2

=(5+

9)/2

=74.比較array[mid]的值和所要查詢的資料進行比較大小

這裡array[7]

=8<

9,所以將array[

7]左邊的所有資料全部拋棄(包括array[7]

),然後令left=mid+

15.計算新的mid

(一半)的值

這裡mid=

(left+right)/2

=(8+

9)/2

=86.比較array[mid]的值和所要查詢的資料進行比較大小

這裡array[8]

=9=9

(找到)

7.列印出mid的值

//下面是c語言的**(直接複製到main.c裡可以直接執行)

#include

intmain

(void);

int left =0;

int right =9;

int mid;

int idx=-1

;int finddata =4;

//假設這裡我們要查詢的資料是4

while

(left<=right)

else

if(finddata > arr[mid]

) left=mid +1;

else

right=mid -1;

}if(idx ==-1

)printf

("not find data\n");

else

printf

("idx=%d\n"

,mid)

;return0;

}

選擇排序法思想及程式設計實戰

1.如下圖所示,我要進行10個數按照公升序排序 2.核心思想 第一輪比較完以後保證6的位置是最小的 按照公升序 第二輪比較完以後保證2的位置是次最小,以此類推。3.關注細節 這裡我要進行排序的一共是10個數,其中共進行了9輪就可以完成排序。每次j都是比i大1個數。從圖看是兩個for迴圈。下面是c i...

遞迴和分治思想(折半查詢)

1 遞迴 歸去來兮 遞迴效率較低,如果明確知道迭代次數,則能用迭代最好用迭代,遞迴是函式自己呼叫自身,每次呼叫都需要入棧等操作。但是遞迴操作要比迭代簡單和清楚。遞迴函式的優點是定義簡單,邏輯清晰。理論上,所有的遞迴函式都可以寫成迴圈的方式,但迴圈的邏輯不如遞迴清晰。使用遞迴函式需要注意防止棧溢位。在...

折半查詢的思想及原始碼 常用排序與查詢演算法

選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理是 第一次從待排序的資料元素中選出最小 或最大 的乙個元素,存放在序列的起始位置,然後再從剩餘的未排序元素中尋找到最小 大 元素,然後放到已排序的序列的末尾。以此類推,直到全部待排序的資料元素的個數為零。選擇排序是不穩定...