資料結構與演算法學習記錄 快速排序

2022-01-15 18:46:47 字數 1235 閱讀 4238

快速排序的基本思想:

分治法,即,分解,求解,組合 .

分解:

在無序區r[low..high]中任選乙個記錄作為基準(通常選第乙個記錄,並記為pivot,其下標為pivotpos),以此為基準劃分成兩個較小的子區間r[low,pivotpos - 1]和r[pivotpos + 1 , high],並使左邊子區間的所有記錄均小於等於基準記錄,右邊子區間的所有記錄均大於等於基準記錄,基準記錄無需參加後續的排序。而劃分的關鍵是要求出基準記錄所在的位置pivotpos.

求解:

通過遞迴呼叫快速排序對左、右子區間r[low..pivotpos-1]和r[pivotpos+1..high]快速排序

組合:

當"求解"步驟中的兩個遞迴呼叫結束時,其左、右兩個子區間已有序。對快速排序而言,"組合"步驟無須做什麼,可看作是空操作。

具體過程:

設序列為r[low,high],從其中選第乙個為基準,設為pivot,然後設兩個指標i和j,分別指向序列r[low,high]的起始和結束位置上:

1),將i逐漸增大,直到找到大於pivot的關鍵字為止;

2),將j逐漸減少,直到找到小於等於pivot的關鍵字為止;

3),如果i

備註:

快速排序是不穩定排序,即相同的關鍵字排序後,相對位置是不確定的。

示例**:

快速排序**c#

public

class

datastructure_quicksort

}while

(nleft 

<

nright); 

//當nleft == nright的時候停止迴圈

//把基準記錄pivot放到正確位置,即nleft和nright同時指向的位置

temp 

=arr[nlower];

arr[nlower] 

=arr[nright];

arr[nright] 

=temp ;

return

nright ;

}public

void

quicksort(

int arr, 

intnlower, 

intnupper)}}

資料結構與演算法 學習記錄(壹)

群集是一種結構化的資料型別。群集可以分為兩類 線性的和非線性的。線性群集是一張元素列表,表中的元素順次相連。線性群集中的元素通常由位置來決定次序 例如,第乙個元素 第二個元素 第三個元素,依次類推 在現實世界中,購物清單就是很好的線性群集例項。而在計算機世界中 當然這也是真實世界 則把陣列設計成線性...

資料結構與演算法學習 選擇排序

選擇排序,選擇排序原理重在乙個 選擇 上,通俗上來說就是把符合要求的資料篩選出來放在合適的位置上。以由小到大排序為例 執行過程為,選擇數列的第i個 i可由數列起始位置開始 並將其假定為最小值,剩下的數列值依次與假定最小值比較,並選擇出真正的最小值。記錄最小值在數列中的位置,交換數列中的最小值與數列的...

資料結構與演算法學習 拓撲排序

乙個表示工程的有向圖中,用定點表示活動,用弧表示活動之間的優先關係,這樣的有向圖為頂點表示活動的網,稱之為aov網。類似於分支流程圖 aov網不存在環。且各頂點有先後順序。aov網輸出所有頂點,並且順序必須按弧的順序 就是按層來輸出全部頂點 這樣的頂點序列稱為拓撲序列。aov網的拓撲序列並不只有一條...