資料結構 排序 交換排序 快速排序法

2021-04-27 16:38:37 字數 1685 閱讀 4573

資料結構-排序: 交換排序(快速排序法)

1、演算法思想

快速排序是c.r.a.hoare於2023年提出的一種劃分交換排序。它採用了一種分治的策略,通常稱其為分治法(divide-and-conquermethod)。

(1) 分治法的基本思想

分治法的基本思想是:將原問題分解為若干個規模更小但結構與原問題相似的子問題。遞迴地解這些子問題,然後將這些子問題的解組合為原問題的解。

(2)快速排序的基本思想

設當前待排序的無序區為r[low..high],利用分治法可將快速排序的基本思想描述為:

①分解:

在 r[low..high]中任選乙個記錄作為基準(pivot),以此基準將當前無序區劃分為左、右兩個較小的子區間r[low..pivotpos- 1)和r[pivotpos+1..high],並使左邊子區間中所有記錄的關鍵字均小於等於基準記錄(不妨記為pivot)的關鍵字 pivot.key,右邊的子區間中所有記錄的關鍵字均大於等於pivot.key,而基準記錄pivot則位於正確的位置(pivotpos)上,它無 須參加後續的排序。

注意:劃分的關鍵是要求出基準記錄所在的位置pivotpos。劃分的結果可以簡單地表示為(注意pivot=r[pivotpos]):

r[low..pivotpos-1].keys≤r[pivotpos].key≤r[pivotpos+1..high].keys

其中low≤pivotpos≤high。

②求解:

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

③組合:

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

2、快速排序演算法quicksort

using system;

using system.collections.generic;

using system.text;

namespace exquicksorter

public void sort(int list, int low, int high)

mid = (low + high) >> 1;

pivot = list[mid];

swap(ref list[low], ref list[mid]);

l = low + 1;

r = high;

do while (l < r);

list[low] = list[r];

list[r] = pivot;

if (low + 1 < r)

sort(list, low, r - 1);

if (r + 1 < high)

sort(list, r + 1, high);}

static void main(string args)

;quicksorter q = new quicksorter();

q.sort(iarrary, 0, 13);

for (int m = 0; m <= 13; m++)

console.writeline("", iarrary[m]);}}

}

資料結構 排序 交換排序 氣泡排序法

資料結構 排序 交換排序 氣泡排序法 氣泡排序 bubble sorting 的基本思想是 設待排序n個元素存放在陣列a n 中,無序區範圍初始為 a 0 a 1 a 2 a n 1 冒泡 排序方法是在當前無序區內,從最上面的元素a 0 開始,對每兩個相鄰的元素a i 1 和a i i 0,1,n ...

資料結構 排序 交換排序 氣泡排序法

氣泡排序 bubble sorting 的基本思想是 設待排序n個元素存放在陣列a n 中,無序區範圍初始為 a 0 a 1 a 2 a n 1 氣泡排序方法是在當前無序區內,從最上面的元素a 0 開始,對每兩個相鄰的元素a i 1 和a i i 0,1,n 1 進行比較,且使值較小的元素換至值較大...

資料結構 交換排序之氣泡排序 快速排序

交換排序 include include void bubblesort int a,int n if flag 0 printf 氣泡排序第 d趟結果為 i 1 for int i 0 i printf n printf n int partition int a,int low,int high...