java歸併排序
概述
歸併排序與快速排序相同,同樣是借鑑二叉樹的思想,時間複雜度O(n),與快速排序一樣是大量資料排序的最優方式之一。
思路分析
歸併排序是將目標陣列分成左右兩個陣列,左右兩個陣列必須是有序的,然後對這兩個陣列合並從而實現排序。對於任意的陣列都可以將所有的資料分成若干個陣列,每個陣列中都只有一個元素,然後兩兩合併。(因此,歸併排序的記憶體開銷會比快速排序多)
程式碼實現
private void mergeSort(int[] array, int left, int right) { if (left >= right) { return; } int mid = (left + right) >> 1; mergeSort(array, left, mid); mergeSort(array, mid + 1, right); merge(array, left, mid + 1, right); } private void merge(int[] array, int left, int mid, int right) { int leftSize = mid - left; int rightSize = right - mid + 1; int[] leftArray = new int[leftSize]; int[] rightArray = new int[rightSize]; System.arraycopy(array, left, leftArray, 0, leftSize); System.arraycopy(array, mid, rightArray, 0, rightSize); int index=left; int leftIndex = 0; int rightIndex = 0; while (leftIndex<leftSize&&rightIndex<rightSize){ if(leftArray[leftIndex]<rightArray[rightIndex]){ array[index++] = leftArray[leftIndex++]; }else { array[index++] = rightArray[rightIndex++]; } } while (leftIndex<leftSize){ array[index++] = leftArray[leftIndex++]; } while (rightIndex<rightSize){ array[index++] = rightArray[rightIndex++]; } }
測試程式碼
@Test public void testMergeSort() { int[] array = new int[]{1, 3, 4, 10, 2, 5, 6, 9, 7, 8}; mergeSort(array, 0, array.length - 1); for (int i = 0; i < array.length; i++) { System.out.println(array[i]); } }
結果列印
1 2 3 4 5 6 7 8 9 10
作者:夜亦明
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4550/viewspace-2821637/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 歸併排序排序
- 快速排序&&歸併排序排序
- 四、歸併排序 && 快速排序排序
- 排序演算法__歸併排序排序演算法
- 排序演算法:歸併排序排序演算法
- 排序演算法 - 歸併排序排序演算法
- 排序演算法(歸併排序)排序演算法
- 歸併排序--排序演算法排序演算法
- 歸併排序--二路排序排序
- 歸併排序和基數排序排序
- 利用java實現插入排序、歸併排序、快排和堆排序Java排序
- 歸併排序 js demo排序JS
- 排序演算法之 '歸併排序'排序演算法
- php實現 歸併排序,快速排序PHP排序
- php插入排序,快速排序,歸併排序,堆排序PHP排序
- 歸併排序 nO(lgn) 稽核中排序
- 歸併排序——C語言排序C語言
- go 實現歸併排序Go排序
- 歸併排序加例題排序
- 氣泡排序、歸併排序與快速排序比較排序
- 歸併排序 2020-09-20排序
- 演算法之歸併排序演算法排序
- 使用 Swift 實現歸併排序Swift排序
- 歸併排序的簡單理解排序
- 演算法:排序連結串列:歸併排序演算法排序
- 排序演算法之「歸併排序(Merge Sort)」排序演算法
- 三種語言實現歸併排序(C++/Python/Java)排序C++PythonJava
- 淺談歸併排序:合併 K 個升序連結串列的歸併解法排序
- 演算法(氣泡排序,快排,歸併排序)演算法排序
- 演算法學習 – 歸併排序演算法排序
- HDU 2689 【歸併排序求逆序對】排序
- 演算法學習 - 歸併排序演算法排序
- 歸併排序(C++_分治遞迴)排序C++遞迴
- 歸併排序MergeSort的C實現排序
- 歸併排序就這麼簡單排序
- rust-algorithms:9-歸併排序RustGo排序
- 歸併排序詳解及應用排序
- 逆序對的數量(歸併排序模板)排序