マージソートアルゴリズムの分析
1. アルゴリズム的思考
分割統治の考え方を使用して、元の配列は毎回 2 つの部分に分割され、その後サブ配列がソートされ、最後にソートされた配列がマージされて新しい順序付けされたシーケンスが形成されます。
1.1 実行プロセス
2. 導入手順
2.1 mergeSort() メソッド
public static void mergeSort(int[]arr){
if (arr == null || arr.length < 2){
return;
}
mergeSort(arr,0,arr.length-1);
}
2.2 複数のサブ配列への分割
public static void mergeSort(int[] arr, int l, int r) {
//如果l和r相等,说明中间只有一个数,数组已经排好序了。
if (l == r) {
return;
}
int mid = l + ((r - l) >> 1);//求中点
//l到mid之间变为有序的
mergeSort(arr, l, mid);
//mid+1到r之间变成有序的
mergeSort(arr, mid + 1, r);
merge(arr, l, mid, r);
}
2.3 サブ配列の結合
public static void merge(int[] arr ,int l ,int m ,int r){
//辅助数组长度的大小
int[] help = new int[r - l + 1];
int i = 0;//辅助数组指针
int p1 = l;//左边数组指针
int p2 = m + 1;//右边数组指针
while (p1 <= m && p2 <= r) {
help[i++] = arr[p1] < arr[p2] ? arr[p1++] : arr[p2++];
}
// 有一边结束了就输入另一边
while (p1 <= m) {
help[i++] = arr[p1++];
}
while (p2 <= r) {
help[i++] = arr[p2++];
}
for (i = 0; i < help.length; i++) {
arr[l + i] = help[i];
}
}
3. 時間計算量の分析
マスターの公式を使用して再帰的動作の時間計算量を分析する
比較式は次のとおりです: T(N) = 2 T(N/2) + O(N); *
したがって、時間計算量はO(N * log N) です。