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