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排序
- Java實現歸併排序Java排序
- [排序] 歸併排序排序
- 歸併排序(java機試題)排序Java
- 歸併排序排序
- 快速排序&&歸併排序排序
- 四、歸併排序 && 快速排序排序
- 歸併排序模板排序
- 歸併排序--二路排序排序
- 排序演算法__歸併排序排序演算法
- 排序演算法:歸併排序排序演算法
- 歸併排序和基數排序排序
- 歸併排序--排序演算法排序演算法
- 排序演算法 - 歸併排序排序演算法
- 排序演算法——歸併排序排序演算法
- 歸併排序 js demo排序JS
- C# 歸併排序C#排序
- 【筆記】歸併排序筆記排序
- 歸併排序例項排序
- 利用java實現插入排序、歸併排序、快排和堆排序Java排序
- 排序演算法之 '歸併排序'排序演算法
- php實現 歸併排序,快速排序PHP排序
- php插入排序,快速排序,歸併排序,堆排序PHP排序
- go 實現歸併排序Go排序
- 歸併排序——C語言排序C語言
- 歸併排序 nO(lgn) 稽核中排序
- 歸併排序加例題排序
- 歸併排序求逆序數排序
- 連結串列歸併排序排序
- 排序(2)--選擇排序,歸併排序和基數排序排序
- 氣泡排序、歸併排序與快速排序比較排序
- 使用 Swift 實現歸併排序Swift排序
- 演算法之歸併排序演算法排序
- 歸併排序的簡單理解排序
- 【資料結構】歸併排序!!!資料結構排序
- 【資料結構】歸併排序資料結構排序
- O(lgn)的三種排序,快速排序、歸併排序、堆排序排序
- 演算法:排序連結串列:歸併排序演算法排序