快速排序具體實現

2021-10-08 07:35:24 字數 2032 閱讀 6810

不穩定但是**級別可以做到穩定排序01 stable sort

/**

* @description:快速排序

* @author mryan

* @date 2020/5/2 15:47

* @version 1.0

*/public class quick_sort ;

public static final void main(string args)

public static void quicksort(int l, int r)

/*確定滿足為止就挖坑在填坑*/

if (nums[j] < x)

/*如果不符合i就++繼續找直到找到為止*/

while (i < j && nums[i] <= x)

/*確定滿足為止就挖坑在填坑*/

if (nums[i] > x)

}nums[i] = x;

/* 遞迴呼叫 */

quicksort(l, i - 1);

/* 遞迴呼叫 */

quicksort(i + 1, r);}}

public static void print_nums(int nums) }}

利用荷蘭國旗思想

跳轉

/**

* @description:快速排序

* @author mryan

* @date 2020/5/2 15:47

* @version 1.0

*/public

class

quick_sort

;sort

(nums,

0, nums.length -1)

;print_nums

(nums);}

public

static

void

sort

(int

nums,

int l,

int r)

}/**

* @param nums

* @param l

* @param r

*/public

static

int[

]partition

(int

nums,

int l,

int r)

//當前值nums[l] 小於 劃分值nums[r]

else

if(nums[l]

< nums[r]

)//當前值nums[l] 大於 劃分值nums[r]

else

if(nums[l]

> nums[r])}

//因為最開始初始化將劃分值歸入大於區中,所以最後將劃分值和大於區第乙個值交換

swap

(nums, right, r)

;//返回兩個值,第乙個是返回小於區的右邊界 閉區間

//第二個是大於區的左邊界 閉區間

//例如 0 4 2 5 7 1 按1作為基準排序,1左邊都是比他小的1右面都是比他大的

//0) 1 ( 5 4 7 2 返回值left,right 為 0和2

return

newint

;}public

static

void

swap

(int

nums,

int l,

int r)

public

static

void

print_nums

(int

nums)

}}

平均時間複雜度:o(nlogn)

最優時間複雜度:o(nlogn)

最差時間複雜度:o(n方)

最優空間複雜度:o(logn)

最差空間複雜度:o(n)

Java快速排序的具體實現

最開始寫快速排序花了不少時間,其實關於排序演算法,最重要的是首先你要理解,各種排序演算法的原理是什麼,當你理解了具體的實現原理再來寫程式的時候你就會覺得很輕鬆了。不多說,直接上 package algorithm.sort 快速排序的實現 author zhoudafu public class q...

快速排序的兩種具體實現

這是快速排序的兩種思想,兩種 思想 include include int partition int a,int p,int r tmp a i 1 a i 1 a r a r tmp return i 1 void quicksort int a,int p,int r int main int...

快速排序演算法具體步驟

快速排序演算法步驟 1 在陣列中選乙個基準數 通常為陣列第乙個 2 將陣列中小於基準數的資料移到基準數左邊,大於基準數的移到右邊 3 對於基準數左 右兩邊的陣列,不斷重複以上兩個過程,直到每個子集只有乙個元素,即為全部有序。例 有無序數列 13,45,76,10,19要球隊數列進行快速排序 第一步 ...