快速排序演算法分析
阿新 • • 發佈:2018-12-25
快速排序:它的基本思想是:找出一個元素(理論上可以在所有值中隨便找一個)作為基準,通過一趟排序將要排序的資料分割成獨立的兩部分,基準左邊的資料都小於基準值,右邊的部分都大於基準值,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。
用圖來說明一下一趟排序的過程:(最後結果為:[小於基準值] 基準 [大於基準值] )
平均時間複雜度:O(N*lgN)
最壞時間複雜度:O(N*N) (若每次找到基準是最大值或者最小值,就是最壞情況)
一趟排序過程的程式碼:
int Partition(int arr[],int len,int start,int end) { if (arr == NULL || len < 0 || start < 0 || end >= len) { return -1; } int small = start - 1; int index = start; for (; index < end; index++) { if (arr[index] < arr[end]) { small++; if (small != index) { swap(arr[index], arr[small]); } } } ++small; swap(arr[index], arr[small]); return small; }
快速排序就是對基準左右兩側的資料再次進行上述一趟排序,重複直到結束;
void QSort(int arr[], int len, int start, int end)
{
if (start == end)
return;
int index = Partition(arr, len, start, end);
if (index > start)
{
QSort(arr, len, start, index - 1);
}
if (index < end)
{
QSort(arr, len, index + 1, end);
}
}
這就是快速排序。