快速排序效能好壞主要在於主元的選取。
下面 有兩種選主元的方式:
(1) : 每次選取當前序列的第乙個元素
(2):選取選取當前序列的 首元素、 中間元素 、 尾元素 的 中位數.
核心 : 每次 給主元找到準確的排序位置(效率高的原因也就在於每次找的的都是準確的位置)。
(1) 選取首元素為基準(主元)的實現:
#includeint a[101];
void sort(int a, int left, int right)
a[left] = a[j];
a[j] = tmp;
sort(a, left, j-1);
sort(a, j+1, right);
}void quick_sort(int a, int n)
int main()
quick_sort(a, n);
for(i = 0; i < n; i++ )
return 0;
}
(2)選取中位數為基準資料的實現:
#include#define max 100
void swap(int *a, int *b)
int get_pivot(int a, int left, int right) //選 主元 就是把 left, right , mid 按照從小到大排序 並把 中間值 返回當做主元
void sort(int a, int left, int right)
//出來時一定是 i == j
swap(&a[j], &a[left]); //找到 主元的合適位置
sort(a, left, j-1);//遞迴 處理左半邊
sort(a, j+1, right);//遞迴處理右半邊
return ;
} void quick_sort(int a, int n)//提供 優雅的 介面
2 快速排序(QuickSort C 實現
快速排序的雖然比較簡單,但對於比較久沒接觸的朋友來說,還是容易遺忘的,本人覺得這裡有兩個難點 1 快速排序中心思想 快速排序的思想歸納起來有的三步 任意選取序列中的乙個元素,用此元素作為 中間元素 這裡說明一下,這個 中間元素 排序後不一定剛好在序列的中間。在序列中取出所有大於 中間元素 的元素,放...
快速排序(QuickSort) C語言版
include include define maxsize 20 順序表的最大長度 typedef int keytype 定義關鍵字型別為整數型別 typedef struct redtype 記錄型別 typedef struct sqlist 順序表型別 quicksort int part...
快速排序 QuickSort C語言版
快速排序的核心在於分治.分治演算法 1.認定只有乙個元素或沒有元素的陣列是有序的.2.將陣列按照乙個分界值分為左右兩部分.左面所有元素值比分界值小,右面所有元素值比分界值大或等於.3.將左右兩部分分別再分治,直到要分支的部分只有乙個元素或沒有元素,那麼整個陣列就是有序的了.部落格 include i...