java 兩個有序數組合併到一個有序陣列(時間複雜度低)
阿新 • • 發佈:2018-12-07
預設一般會採用陣列先合併,在排序
時間複雜度會在o(n) -o(n*n) 之間
我想了個其他的思路 對陣列1 和陣列2 元素從頭開始進行一次對比,小的放入結果集合,
直到兩個陣列的元素都加入結果集合
這樣的時間複雜度 在o(n) 只要比較兩個陣列較短的長度的次數
程式碼
import java.util.ArrayList; /** * 兩個有序數組合併到 一個新排序陣列 * @version * @author flyer 2018年12月6日下午1:20:28 * @since 1.8 */ class QuickSort { public static void main(String[] agrs) { int a[] = { 1, 3, 8 }; int b[] = { 2, 6, 6, 10, 15 }; //生產的處理結果的陣列 ArrayList<Integer> t = new ArrayList<>(); //檢視a數組裡面處理到的位置 int ak = 0; //檢視b數組裡面處理到的位置 int bk = 0; //a數組裡面元素是否都已經被處理 boolean isAOk = false; boolean isBOk = false; //a ,b陣列都已經處理結束 boolean isOk = false; while (!isOk) { if (!isAOk && a[ak] <= b[bk]) { t.add(a[ak]); System.out.print(a[ak]); if (ak < a.length - 1) ak++; else { isAOk = true; //a處理完,直接把b陣列剩下的加進去即可 for (int tmp = bk; tmp < b.length; tmp++) { t.add(b[tmp]); System.out.print(b[tmp]); } //a,b都處理完 程式結束 isOk = true; } } else if (!isBOk && a[ak] > b[bk]) { t.add(b[bk]); System.out.print(b[bk]); if (bk < b.length - 1) bk++; else { isBOk = true; for (int tmp = ak; tmp < a.length; tmp++) { t.add(a[tmp]); System.out.print(a[tmp]); } isOk = true; } } } System.out.println(" result:"); for (int i = 0; i < t.size(); i++) { System.out.print(t.get(i) + " "); } } }