與歸併排序一樣,快速排序也是乙個分治演算法,需要選擇乙個基準(第乙個元素,最後乙個元素,隨機乙個元素),以此基準作為劃分;快速排序的關鍵是劃分partion()
;。每一趟劃分,我們就可以將作為基準值 x 放到排序陣列的正確位置,並且將所有比 x 小的放到 x 的左邊,所有比 x 大的元素放到 x 的右邊。
class quicksort
} // 交換 arr[i+1] 和 arr[high] (也就是pivot)
int temp = arr[i+1];
arr[i+1] = arr[high];
arr[high] = temp;
return i+1;
} /*分的階段,利用遞迴呼叫實現快速排序*/
void sort(int arr, int low, int high)
} /* 列印輸出 */
static void printarray(int arr)
{ int n = arr.length;
for (int i=0; i快速排序的實現中,我們僅使用了乙個臨時變數用於交換操作,也就是其空間複雜度為 1,所以快速排序也是乙個原地排序演算法;
在歸併排序中,陣列總被劃分為兩半(即n/2 );而快速排序,陣列可能被劃分為任意比例,而不是強制要求將陣列劃分為相等的兩部分。
歸併排序適用於任何型別的資料集,不受資料集大小限制;而快速排序不適用於大規模資料集(簡單來說,就是陣列太大,快速排序效果並不好)
快速排序理解
include include stdafx.h define n 7 void print2 int a printf n void sort int data,int left,int right int i left int j right int key data i while i j 左...
快速排序理解
每次處理好 某個 標桿 數字 在 最終 陣列 中的位置。然後 每個 數字 依次 作為標桿數,都找到 自己的 位置。相比 氣泡排序,冒泡 是每次找 最大數字的 位置,找好後 在 不包含最大 數字的 陣列中,再 次找 當前最大數的 位置。而快速 排序 是 找 指定 標桿數 的位置。標桿數 可以是任意乙個...
快速排序基本思路
尊重原創,原文鏈結 今天看到大神寫的一篇快速排序的部落格,肅然起敬,覺得原來快速排序這麼簡單 下面進行簡單的試試 快速排序的基本思想是 1 先從數列中取出乙個數作為基準數 2 分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊 3 再對左右區間重複第二步,直到各區間只有乙個數...