package basic_class_01;
/** * 規並排序
*@author lenovo
* */
public
class
code_05_mergesort
mergesort(arr, 0, arr.length - 1);
}/**
* 這個排序的方法也是使用遞迴 因為可以將乙個陣列 分成左部分排序 跟 右部分排序 排序都是屬於同類的問題
* 所以可以使用遞迴
*@param arr
*@param l
*@param r
*/public
static
void
mergesort(int arr, int l, int r)
int mid = l + ((r - l) >> 1); // 這種方法是求中點的一種比較好的方法
// 如果是 mid = (l + r) / 2 -- (l + r) 的數字可能比較大 可能int型別會溢位
mergesort(arr, l, mid); // 將這個陣列的左半部分進行排序
mergesort(arr, mid+1, r); // 將這個陣列的右半部分進行排序
merge(arr, l, mid, r); // 左邊跟右邊排好序之後 再同一進行合併排序
}// 這個方法其實才是核心的排序方法
public
static
void
merge(int arr, int l, int m, int r)
// 只要有任何一方的陣列遍歷完了,就結束while迴圈
// 那麼只有左部分陣列 或者 右部分 陣列 還有元素 不可能同時 都 有元素
while(p1 <= m)
while(p2 <= r)
for(i = 0; i < help.length; i++)
}}
插入排序 包含筆者的分析過程
package basic class 01 插入排序 始終定義第乙個元素為有序的,將元素逐個插入到有序排列之中,其特點就是 要不斷地移動資料,空出乙個適當的位置,把待插入的元素放到前面有序的陣列中去 最差時間分析 o n 2 平均時間複雜度 o n 2 穩定度 穩定 空間複雜度 o 1 autho...
歸併排序分析
歸併排序 merge sort 是利用歸併的思想實現的排序方法,該演算法採用經典的分治 divide and conquer 策略 分治法將問題分 divide 成一些小的問題然後遞迴求解,而治 conquer 的階段則將分的階段得到的各答案 修補 在一起,即分而治之 網上一張圖 可以看到這種結構很...
歸併排序 過程詳述
歸併排序是利用遞迴和分而治之的技術將資料序列劃分成為越來越小的半子表,再對半子表排序,最後再用遞迴步驟將排好序的半子表合併成為越來越大的有序序列,歸併排序包括兩個步驟,分別為 1 劃分子表 2 合併半子表 首先我們來討論歸併演算法,歸併演算法將一系列資料放到乙個向量中,索引範圍為 first,las...