二分查詢也叫折半查詢,每次去掉一半的查詢範圍,從而提高查詢效率
陣列元素必須按照從小到大或者從大到小的順序排列
定義兩個變數,預設最小值變數min = 0,最大值變數max = 最大索引,該範圍是要查詢的範圍
迴圈查詢,但min <= max
計算出中間值mid = (max + min) / 2
判斷mid位置是否為要查詢元素,如果是直接返回
如果要查詢的值小於mid,則說明該值在陣列中的左半邊,min值不變,max = mid - 1,重複3、4步操作
如果要查詢的值大於mid,則說明該值在陣列中的右半邊,max值不變,min = mid + 1,重複3、4步操作
如果min > max,說明該值在陣列中不存在,返回 -1,結束迴圈
public
class
binarysearch
;int number =11;
int index =
binarysearchforindex
(arr,number)
;
system.out.
println
(index);}
private
static
intbinarysearchforindex
(int
arr,
int number)
else
if(arr[mid]
< number)
else
}//如果min大於了max就表示元素不存在,返回-1.
return-1;}}
一種排序方式,將陣列中的元素兩兩比較,將較大的資料放在後面,依次對所有資料進行操作,直到完成所有排序
例:陣列
第一次排序得出最大數 52 放在最後
第二次排序得出第二大數 48 排在倒數第二
第三次排序得出第三大數 36 排在倒數第三
第四次排序得出第四大數 12 排在倒數第四,最後剩下 5 最小,排在最後
因此我們可以發現,如果又n個資料進行排序,則需要進行比較n-1次,每比較完一輪後,下一次比較就會少乙個資料參與比較
public
class
bubblesort
;//1 2 3 4 5
bubblesort
(arr);}
private
static
void
bubblesort
(int
arr)}}
printarr
(arr);}
private
static
void
printarr
(int
arr)
system.out.
println();}}
快速排序當每次遞迴時以第乙個數為基準數,找到陣列中找出所有比基準數小的,再找出所有比基準數大的,小的全放在左邊,大的全放在右邊,最後重新建立基準數
首先確定陣列中最昨天的數為基準數basenumber = arr[0]
定義兩個索引 left = 0,right = arr.size() - 1
left從左到右判斷該索引處的元素是否比基準數大,若小於基準數則 left++,找到時停止
right從右到左判斷該索引處的元素是否比基準數小,若大於基準數則right–,找到時停止
left與right都停止時,交換兩個位置的值
繼續執行3、4、5步驟,當left == right時,將基準數與該索引處的資料交換
基準數歸為
public
class
quitesortdemo
;quitesort
(arr,
0,arr.length-1)
;for
(int i =
0; i < arr.length; i++)}
private
static
void
quitesort
(int
arr,
int left,
int right)
int left0 = left;
int right0 = right;
//計算出基準數
int basenumber = arr[left0]
;while
(left != right)
// 2,從左開始找比基準數大的
while
(arr[left]
<= basenumber && right > left)
// 3,交換兩個值的位置
int temp = arr[left]
; arr[left]
= arr[right]
; arr[right]
= temp;
}//基準數歸位
int temp = arr[left]
; arr[left]
= arr[left0]
; arr[left0]
= temp;
quitesort
(arr,left0,left-1)
;//排左邊
quitesort
(arr,left +
1,right0)
;//排右邊
}}
scala實現快排,歸併,冒泡,二分查詢
快速排序使用分治的思想,選定乙個基準點,通過一趟排序將待排序的序列分為左右兩個部分,其中左邊的部分都比基準點要小,右邊的基準點都比基準點要大,之後在分別對左右兩邊的部分,按照相同的思想繼續切分,最終達到乙個有序佇列的目的 時間複雜度 o nlog n 空間複雜度 o log n def quicks...
快排和二分查詢
我只是課本的搬運工,做做筆記,當練打字也可以。這裡我把qsort放前面講是因為bsearch在使用之前需要對陣列進行排序,排完後才能進行查詢。老師說學了快排之後就不要用氣泡排序法和選擇排序法了,然而我選擇排序還不太會,找個時間整理整理吧。快速排序 qsort函式 標頭檔案 或 功能 對具有num個元...
模板題 快排 歸併 二分
include using namespace std const int n 1000010 int q n void quick sort int q,int l,int r quick sort q,l,j quick sort q,j 1,r intmain include using na...