不穩定但是**級別可以做到穩定排序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要球隊數列進行快速排序 第一步 ...