快速排序(C )

2022-09-04 11:42:11 字數 1564 閱讀 4914

快速排序是面試中經常問到的排序演算法

基本思想:通過一趟排序將待排序記錄分割成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分記錄的關鍵字小,

則可分別對這兩部分記錄繼續進行排序,以達到整個序列有序的目的

**如下:

1.swap 交換函式

void swap(int& a,int& b)

2.partition函式—快速排序中最關鍵的函式

int partition(int* list,int low,int

high)

return

low;

}

3.qsort函式—快速排序演算法實現—遞迴

void qsort(int* list,int low ,int

high)

}

改進演算法:

1.優化選取樞軸

partition函式中選取pivotkey是乙個關鍵,如果pivotkey選取的不是中間數,效率會受到不同程度的影響

比如陣列,pivotkey = 9,partition結果是最後一位,只是實現了9和2的互換

改進辦法:

1.取隨機數

2.三數取中:取三個關鍵字先進行排序,將中間數作為樞軸,一般是取左端、右端、中間三個數

在partition基礎之上,新增、修改成如下**:

int

pivotkey;

int m = low+(high-low)/2

;

if(list[low]>list[high])

swap(list[low],list[high]);

if(list[m]>list[high])

swap(list[m],list[high]);

if(list[m]swap(list[m],list[low]);

pivotkey = list[m];

當然也可以九數取中  

2.優化不必要的交換

int partition2(int* list,int low,int

high)

list[low] =temp;

return

low;

}

3.優化小陣列時的排序方案

如果陣列是小陣列,應該採用插入排序,如果陣列較長,應該採用快速排序

void qsort1(int* list,int low,int

high)

else

}

4.優化遞迴操作

void qsort2(int *list,int low,int

high)

}else

}

排序 快速排序(C )

1 演算法描述 1.1 設當前參加排序的陣列為array 0.n 1 選擇乙個元素 通常稱該元素為基準元素 作為基準元素 將小於或者等於基準元素的所有元素都移到基準元素的左邊 把大於或者等於基準元素的所有元素都移到分界元素的右邊 執行完 2 3 步驟後,基準元素左邊元素序列,基準元素,基準元素右邊元...

排序 快速排序(C )

如果看不懂這些乾巴巴的理 字,那就先不用看了,下面 中有詳細的注釋,大家可以先跟著 走幾遍,回過頭來再看這些文字描述,總之 紙上得來終覺淺,絕知此事要躬行。排序演算法哪家強,從實際應用的角度上將,快排表現很好。很自然地,人們會覺得短陣列比長陣列更好處理,因此可能會想到將原始陣列分為若干各子部分然後分...

快速排序 c

快速排序應該是目前最快,也是最常用的一種排序演算法。它將乙個集合劃分成兩個子集合,然後繼續遞迴來完成最終排序。具體做法 1.選取集合最右端的元素作為乙個參照物,稱之為 樞紐 pivot 2.開始計算分割位置。在計算時,進行元素交換,確保左側元素都小於樞紐,而右側都大於樞紐。3.根據分割位置,分別遞迴...