Java快速排序

2021-07-28 11:50:54 字數 1625 閱讀 7789

-以乙個數作為標誌,將序列分為兩部分

-v:標誌

-j:分界標誌

-e:正在訪問的標誌

-複雜度(nlog(n))

import helper.sorttesthleper;

public

class

quicksort

// 對arr[l...r]部分進行快速排序

private

static

super t>> void

sonofquicksort(t arr, int l, int r)

// 對arr[l...r]部分進行partition分治操作,返回值是作為分界點

private

static

super t>> int

partition(t arr, int l, int r)

}t tmp;

tmp = arr[l];

arr[l] = arr[j];

arr[j] = tmp;

return j;

}public

static

void

main(string args)

}

-陣列大小為100000的情況下輸出結果

歸併排序演算法消耗時間53328ms

快速排序演算法消耗時間448ms

-高階的排序演算法到底層時可以採用插入的排序演算法進行優化

if (r - l <= 15)
歸併排序演算法消耗時間50327ms

快速排序演算法消耗時間374ms

-歸併排序子陣列比較均勻

-快速排序子陣列很大情況下為一大一小,平衡度差

-快速排序樹的高度沒辦法保證

-當陣列完全有序時會退化為o(n^2)

-隨機採用元素做標記元素可以使得時間複雜度期望值為o(nlog(n))

private

static

super t>> int

partition(t arr, int l, int r)

}t tmp;

tmp = arr[l];

arr[l] = arr[j];

arr[j] = tmp;

return j;

}

-優化後結果

歸併排序演算法消耗時間46975ms

快速排序演算法消耗時間324ms

java 快速排序

public class myquicksort while strvoid middle strvoid low lowif low hight else if hight middle temp strvoid hight strvoid hight strvoid low strvoid lo...

快速排序(java)

快速排序 public class quacksort int pivot arr low 取第乙個數作為中間數 左滑塊當前的下標數,從第二個數字開始,從最後乙個開始 int left low 1 int right high 右滑塊當前的下標數 while left right 從右邊開始找 wh...

快速排序(Java)

快速排序的思想是基於分治法加上遞迴思想,排序陣列時,將陣列分成兩個小部分,然後對它們遞迴排序,直到它們都不可再分為止。快速排序的平均執行時間是o nlog n 遠比插入排序的o n 2 時間小。快速排序 param arr param start param end return private s...