如果搜尋的數列已經有排序,應該盡量利用它們已排序的特性,以減少搜尋比對的次數,這是搜尋的基本原則,二分搜尋法是這個基本原則的代表。
在二分搜尋法中,從數列的中間開始搜尋,如果這個數小於我們所搜尋的數,由於數列已排序,則該數左邊的數一定都小於要搜尋的物件,所以無需浪費時間在左邊的數;如果搜尋的數大於所搜尋的物件,則右邊的數無需再搜尋,直接搜尋左邊的數。
所以在二分搜尋法中,將數列不斷的分為兩個部份,每次從分割的部份中取中間數比對,例如要搜尋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,演算法運算終止。總結一下,二分搜尋需要注意的點有以下幾條 陣列一定記得要先排序!不...