C 經典演算法題 二分搜尋法(搜尋原則的代表)

2021-10-02 06:26:28 字數 1671 閱讀 1228

如果搜尋的數列已經有排序,應該盡量利用它們已排序的特性,以減少搜尋比對的次數,這是搜尋的基本原則,二分搜尋法是這個基本原則的代表。

在二分搜尋法中,從數列的中間開始搜尋,如果這個數小於我們所搜尋的數,由於數列已排序,則該數左邊的數一定都小於要搜尋的物件,所以無需浪費時間在左邊的數;如果搜尋的數大於所搜尋的物件,則右邊的數無需再搜尋,直接搜尋左邊的數。

所以在二分搜尋法中,將數列不斷的分為兩個部份,每次從分割的部份中取中間數比對,例如要搜尋92於以下的數列,首先中間數索引為(0+9)/2 = 4(索引由0開始):

[324

5757

6768

8390

9295

]

由於67小於92,所以轉搜尋右邊的數列:3 24 57 57 67 [68 83 90 92 95]

由於90小於92,再搜尋右邊的數列,這次就找到所要的數了:3 24 57 57 67 68 83 90 [92 95]

#include

#include

#include

#define max 10

#define swap(x,y)

void

quicksort

(int

,int

,int);

intbisearch

(int

,int);

intmain

(void);

int i, find;

srand

(time

(null))

;for

(i =

0; i < max; i++

)quicksort

(number,

0, max-1)

;printf

("數列:");

for(i =

0; i < max; i++

)printf

("%d "

, number[i]);

printf

("\n輸入尋找物件:");

scanf

("%d"

,&find);if

((i =

bisearch

(number, find)

)>=0)

else

printf

("找到數字於索引 %d "

, i)

;printf

("\n找不到指定數");

printf

("\n");

return0;

}int

bisearch

(int number,

int find)

return mid;

return-1

;}void

quicksort

(int number,

int left,

int right)

quicksort

(number, left, i-1)

;// 對左邊進行遞迴

quicksort

(number, j+

1, right)

;// 對右邊進行遞迴

}}

二分搜尋法(搜尋原則的代表)

如果搜尋的數列已經有排序,應該盡量利用它們已排序的特性,以減少搜尋比對的次數,這是搜尋的基本原則,二分搜尋法是這個基本原則的代表。public class binarysearch return 1 public static void main string args quicksort.sort...

二分搜尋法

一 問題描述 給定n個元素,這些元素是有序的,從陣列中查詢特定的元素x。個人覺得二分法搜尋是分治法裡面最簡單的乙個搜尋演算法了,就是設定乙個下界low和上界high,然後再設乙個指標mid mid low high 2 然後隨著每次搜尋mid會在兩個區間之間 low,mid 1 和 mid 1,hi...

二分搜尋法

二分搜尋法,它充分利用了元素間的次序關係,採用分治策略,可在最壞的情況下用o log n 完成搜尋任務。它的基本思想是,將n個元素分成個數大致相同的兩半,取a n 2 與欲查詢的x作比較,如果x a n 2 則找到x,演算法運算終止。總結一下,二分搜尋需要注意的點有以下幾條 陣列一定記得要先排序!不...