常用排序演算法 希爾,歸併,快排

2021-09-26 22:40:33 字數 1744 閱讀 8118

public

static

comparable

>

void

shellsort

(t arr)

while

(h >=1)

} h = h/3;

}}

public

class 歸併排序

}/**

* 對兩個有序序列進行合併

** @param arr

* @param low

* @param mid

* @param high

* @param temp

*/private

static

void

merge

(int

arr,

int low,

int mid,

int high,

int[

] temp)

else

}//將剩餘的數拷貝置temp

while

(j <= mid)

while

(k <= high)

//將temp中資料拷貝置arr,因為是區域性的資料,所以arr[low+n]要根據low的位置來定位

for(

int n =

0; n < i; n++)}

public

static

void

main

(string[

] args)

;int

tmp =

newint

[arr.length]

;//新建乙個臨時陣列存放

mergesort

(arr,

0, arr.length -

1, tmp)

;for

(int i =

0; i < arr.length; i++)}

}

public

static

void

quicksort

(int

arr,

int l,

int h)

int m =

partition

(arr, l, h)

;quicksort

(arr, l, m-1)

;quicksort

(arr, m +

1, h);}

private

static

intpartition

(int

arr,

int l,

int h)

//從頭開始如果當前切分元素大於arr[i] ;

while

(v < arr[

--j]

&& j != l)

// 從尾部開始遍歷如果當前切分元素小於arr[j]

if(i >= j)

break

;swap

(arr, i, j);}

swap

(arr,l,j)

;return j;

}private

static

void

swap

(int

arr,

int i,

int j)

排序詳解(希爾,快排,歸併等)

今天集中把幾種排序的方法列一下,當然最出名的希爾,快排,歸併和其優化當然也是滿載 說到希爾排序的話,不得不先提到的就是插入排序了,希爾排序就是對直接插入排序的一種優化,下面就是直接插入排序的思想 直接插入排序 這就是直接插入排序的 思想很簡單,也很簡單 為什麼希爾排序比直接插入排序更加優化呢?當需要...

排序演算法 快排,歸併

從陣列中隨機選乙個數,比這個數大的放右邊,比這個數小的放左邊。快排中的乙個細節 如果乙個數等於p的時候,既可以在左邊又可以在右邊。這麼做是為了避免如果陣列中所有的數都一樣,則會造成資料的不平衡。快排的目的是能夠使得左邊和右邊的數都差不多,這樣的話時間複雜度就不會退化到o n 2 而是o n logn...

排序演算法 歸併 快排

歸併排序的思想是分治法,如果想要將乙個陣列排序,那麼將這個陣列分為左區間和右區間,左區間一定是小於右區間的,再將左區間繼續劃分,右區間也繼續劃分。最後將排好序的陣列全都歸併起來,這樣聽起來像是從上向下劃分,其實歸併排序主要是是從下向上,合併的過程。先將單個元素的陣列歸併為兩個元素的有序陣列 再將包含...