快速排序法為冒泡法的改進法,也是乙個最好的內排序,面試題也常遇到,也是作為碼農必須掌握的一種排序法
原理:取基準值(一般為第乙個),分割槽,將小於中間值的數值移到左側,大於的移到右側,反覆這個過程;所以我是把快速排序聯想成東拆西補或西拆東補,一邊拆一邊補,直到所有元素達到有序狀態。1.在待排序的元素任取乙個元素作為基準(通常選第乙個元素,但最的選擇方法是從待排序元素中隨機選取乙個作為基準),稱為基準元素;
2.將待排序的元素進行分割槽,比基準元素大的元素放在它的右邊,比其小的放在它的左邊;
3.對左右兩個分割槽重複以上步驟直到所有元素都是有序的。
下面再看看示圖理解下吧:
演算法實現
package sort;
/** * created by lading on 2017/11/8.
*/public
class
quicksort ;
quicksort(num,0,num.length-1);
for (int i:num)
}/**
* 快速排序法
* 原理:取基準值(一般為乙個),分割槽,將小於中間值的數值移到左側,大於的移到右側,反覆這個過程;
*思想:1.在待排序的元素任取乙個元素作為基準(通常選第乙個元素,但最的選擇方法是從待排序元素中隨機選取乙個作為基準),稱為基準元素;
*2.將待排序的元素進行分割槽,比基準元素大的元素放在它的右邊,比其小的放在它的左邊;
*3.對左右兩個分割槽重複以上步驟直到所有元素都是有序的。
*/public
static
void
quicksort(int num, int start, int end)
int i=start;
int j =end;
int value=num[i];
int temp=0;
boolean flag=true;
while (i!=j)else
}elseelse }}
quicksort(num, start, j-1); //對基準元素左邊的元素進行遞迴排序
quicksort(num, i+1, end); //對基準元素右邊的進行遞迴排序}}
排序前:演算法分析:12 33 1 98 65 77 55 99 62
排序後:
1. 當分割槽選取的基準元素為待排序元素中的最大或最小值時,為最壞的情況,時間複雜度和直接插入排序的一樣,移動次數達到最大值cmax = 1+2+…+(n-1) = n*(n-1)/2 = o(n2) 此時最好時間複雜為o(n2)
2. 當分割槽選取的基準元素為待排序元素中的」中值」,為最好的情況,時間複雜度為o(nlog2n)。
3. 快速排序的空間複雜度為o(log2n).
4. 當待排序元素類似[6,1,3,7,3]且基準元素為6時,經過分割槽,形成[1,3,3,6,7],兩個3的相對位置發生了改變,所是快速排序是一種不穩定排序。
快速排序法
一 快速排序演算法的基本特性 時間複雜度 o n lgn 最壞 o n 2 空間複雜度 o n lgn 不穩定。快速排序是一種排序演算法,對包含n個數的輸入陣列,平均時間為o nlgn 最壞情況是o n 2 通常是用於排序的最佳選擇。因為,基於比較的排序,最快也只能達到o nlgn c void q...
快速排序法
include stdafx.h include vos.h define table mid machine name midmachine define table midmach colname id id define table midmach colname ip ip define t...
快速排序法
快速排序法思想 在待排序的n個資料中取第乙個數字為基準數,陣列最前面放乙個標桿,陣列最後麵放乙個標桿,通過基準數和標桿 i,j 出的數進行比較,實現每次排序完時候,共三組數,不大於基準數 基準數 不小於基準數 舉例說明 5 i 4,6,8,3,9,2 j 基準數5 標桿 i 指向5位置,標桿 j 指...