歸併排序
先將問題分解為小問題即乙個個子序列,再將子串行按順序合併。
**:
class
mergesort
;mergesort
(a,0
, a.length -1)
;for
(int t : a)
}public
static
void
mergesort
(int
a,int m,
int n)
public
static
void
merge
(int
a,int m,
int n,
int r)
else
temp[k]
= a[j++];
k++;}
// 將沒有存入的數存入陣列
int start = i <= r ? i : j;
int end = i <= r ? r : n;
while
(start <= end)
temp[k++
]= a[start++];
// 將temp陣列拷回原陣列
for(i =
0; i <= n - m;
++i)
a[m + i]
= temp[i];}
}
快速排序:
將陣列劃分為兩個子陣列,再將子陣列繼續劃分直到不能再劃分得到有序陣列。
**:
class
quicksort
;quicksort
(a,0
, a.length -1)
;for
(int t : a)
system.out.
print
(t +
" ");}
public
static
void
quicksort
(int
a,int m,
int n)
public
static
intpartition
(int
a,int m,
int n)}}
// temp = a[i];
// a[i] = a[n - 1];
// a[n - 1] = a[i];
a[n]
= a[i]
; a[i]
= pivot;
return i;
}}
歸併排序和快速排序
歸併排序的陣列排序任務可以如下完成 1 把前一半排序 2 把後一半排序 3 把兩半歸併到乙個新的有序陣列,然後再拷貝回原陣列,排序完成。include using namespace std void merge int a,int s,int m,int e,int tmp while p1 m ...
快速排序和歸併排序
遞推公式 merge sort p,r merge merge sort p,q merge sort q 1 r 終止條件 p r 10組測試資料 for let i 0 i 10 i 生成10個隨機元素的測試陣列 function gettestdata return ret 排序函式 func...
排序 歸併排序和快速排序
1,歸併排序的基本思想 1,將兩個或兩個以上的有序序列合併成乙個新的有序序列,比如有序序列 v 0 v m 和 v m 1 v n 1 合併為 v 0 v n 1 這種歸併方法稱為 2 路歸併 1,必須大於 1 個有序序列 2,必須有序 2,歸併的套路 1,將 3 個有序序列歸併為乙個新的有序序列,...