歸併排序思想:
1.把長度為n的輸入序列分成兩個長度為n/2的子串行;
2.對這兩個子串行分別採用歸併排序;
3.將兩個排序好的子串行合併成乙個最終的排序序列。
小結:平均時間複雜度o(nlogn);最好情況o(nlogn);最壞情況o(nlogn);空間複雜度o(n);占用額外記憶體;穩定性:穩定
//歸併排序入口
public static void mergersort(int arra)
mergersort(arra, 0, arra.length - 1);
}public static void mergersort(int arra, int left, int right)
int middle = left + ((right - left) >> 1);
mergersort(arra, left, middle);
mergersort(arra, middle + 1, right);
merger(arra, left, middle, right);
}public static void merger(int arra, int left, int middle, int right)
while (p1 <= middle)
while (p2 <= right)
}//測試用例
public static void main(string args) ;
mergersort(arra);
}
3 排序演算法 歸併排序
問題描述 歸併排序演算法對下列例項排序,寫出基於歸併排序演算法對下面例項進行排序的具體過程。a 48,12,61,3,5,19,32,7 解題思想 將n個元素分成2個子集合,分別對子集合進行排序,最終將排好序的子集合合併為有序集合。n 1是中止。如下 include include using na...
19 排序 歸併排序
將已有序的子串行合併,得到有完全有序的序列 leftstart 左邊陣列的起始位置,rightstart 右邊陣列的起始位置,rightend 右邊陣列的結束位置 void merge elementtype a,elementtype tmpa,int leftstart,int rightsta...
04 排序 歸併排序
基本原理 對於給定的一組資料 假設有n個資料 首先將每兩個相鄰長度為1的子串行進行歸併,得到n 2個長度為2或者1的有序子串行,再將其兩兩合併,反覆此過程,得到乙個有序序列。package com.sort 歸併演算法 public class testmergesort else while i ...