陣列的高階操作 二分 冒泡 快排

2021-10-24 23:07:30 字數 3107 閱讀 1508

二分查詢也叫折半查詢,每次去掉一半的查詢範圍,從而提高查詢效率

陣列元素必須按照從小到大或者從大到小的順序排列

定義兩個變數,預設最小值變數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...