1. 程式人生 > >基於Java實現歸併排序

基於Java實現歸併排序

歸併排序

public static void mergeSort(int[] arr) {
        if (arr == null || arr.length < 2) {
            return;
        }
        mergeSort(arr, 0, arr.length - 1);
    }

    public static void mergeSort(int[] arr, int l, int r) {
        if (l == r) {
            return;
        }
        int
mid = l + ((r - l) >> 1); mergeSort(arr, l, mid); mergeSort(arr, mid + 1, r); merge(arr, l, mid, r); } 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]; } }

相關推薦

基於Java實現歸併排序

歸併排序 public static void mergeSort(int[] arr) { if (arr == null || arr.length < 2) { return; }

java實現歸併排序

歸併排序:顯示不停的分割,一次分一半。。。直到分到全部為單個的時候,然後在慢慢合併回來。 程式碼: package test2018926; public class MergeSort { public static void main(String[] args) {

Java實現--歸併排序(遞迴)

《Java資料結構和演算法》如此描述分治演算法: 把一個大問題分成兩個相對來說更小的問題,並且分別解決每一個小問題,對每一個小問題的解決方案是一樣的:把每個小問題分成兩個更小的問題,並且解決它們。這個過程一直持續小去知道達到易於求解的基值情況,就不用再繼續分了。 時間複雜度:

java實現歸併排序演算法

前面我們講了歸併排序演算法,接下來我們來用java程式碼實現唄,如下 package ttt; import java.util.Arrays; public class MergeSort { public static int[] lastMergeSort(in

java實現歸併排序(思想與實現

歸併排序歸併排序是採用分治法的一個非常典型的應用。歸併排序的思想就是先遞迴分解陣列,再合併陣列。將陣列分解最小之後,然後合併兩個有序陣列,基本思路是比較兩個陣列的最前面的數,誰小就先取誰,取了後相應的指標就往後移一位。然後再比較,直至一個數組為空,最後把另一個數組的剩餘部分複

排序演算法Java實現——歸併排序

歸併排序(也可以叫合併排序),其實歸併排序的本質就是合併排序。 它是與插入排序、交換排序、選擇排序不同的一類排序方法,不同之處在於: 它要求:待排序序列是由若干個有序子序列組成。 那麼究竟什麼是歸併排序呢?歸併這個詞到底是什麼意思? 首先可以理解為就是合併,然後就是這個詞的

Java實現歸併排序與總結

一、思路1.劃分:用遞迴的思想將陣列進行劃分,劃分原則類似於二分查詢,直到劃分單元的元素個數為1.2.歸併:在將同層的兩個有序子組歸併成一個有序子組,複製一個將兩個有序子組合並的陣列,設定兩個遊標,初始位置為複製陣列對應的兩個有序子組的起始位置,比較兩個遊標所指向的元素的大小,將小的元素放入到合併空間,直到歸

Java實現歸併排序

public class MergeSort {         //每一次的歸併操作private void merge(int[] a, int[] b, int l, int m, int h) {int i, j, k;for (k = l, j = m + 1; l <= m &&am

JAVA實現歸併排序

歸併排序(Merge)是將兩個(或兩個以上)有序表合併成一個新的有序表,即把待排序序列分為若干個子序列,每個子序列是有序的。然後再把有序子序列合併為整體有序序列。 歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法(Divide and C

Java歸併排序的非遞迴實現 資料結構與演算法合集 資料結構與演算法合集

  歸併排序可以採用遞迴方法(見:歸併排序),但遞迴方法會消耗深度位O(longn)的棧空間,使用歸併排序時,應該儘量使用非遞迴方法。本文實現了java版的非遞迴歸併排序。 更多:資料結構與演算法合集 思路分析   遞迴排序的核心是merge(int[] arr, int start, int mid,

Java程式碼實現歸併排序

Java程式碼實現歸併排序 歸併排序(Merge Sort) 思路:如果要排序一個數組,我們先把陣列從中間分成前後兩部分,然後對前後兩部分分別排序,再將排好序的兩部分合並在一起,這樣整個陣列就都有序了。 所以說歸併排序的核心思想是排序和合並兩個有序陣列,這個規程需要用遞迴來實

Java實現快速排序歸併排序、堆排序和希爾排序

快速排序 演算法思想 1.將陣列的第一個元素取為target,定義兩個指標i 和 j; 2.指標i ,從左向右找到第一個比target大的元素,指標j從右向左找到第一個比target小的元素,

遞迴和迭代兩種方式實現歸併排序Java版)

遞迴版 package MergeSort; import Utils.SortUtils; /** * 歸併排序遞迴版 * @author liguodong */ pub

Java實現排序演算法及比較 [冒泡,選擇,插入,歸併,希爾,快排]

      排序演算法的穩定性:假定在待排序的記錄序列中,存在多個具有相同的關鍵字的記錄,若經過排序,這些記錄的相對次序保持不變,即在原序列中,ri=rj,且ri在rj之前, 而在排序後的序列中,ri仍在rj之前,則稱這種排序演算法是穩定的;否則稱為不穩定的。 氣泡排序:穩

Java 實現冒泡排序

string 復雜度 nbsp ras 計算 plain length lai article 冒泡排序: 就是按索引逐次比較相鄰的兩個元素,假設大於/小於(取決於須要升序排還是降序排)。則置換,否則不做改變 這樣一輪下來。比較了n-1次。n等於元素的個數;n-

Java實現快速排序

static nlogn -- 可能 超過 highlight uic 數組 images 一、快速排序的思想   基於分治的思想,是冒泡排序的改進型。首先在數組中選擇一個基準點(該基準點的選取可能影響快速排序的效率,後面講解選取的方法),然後分別從數組的兩端掃描數組,設兩

使用java實現快速排序的一個簡單例子

fast val rgs 快速 實現 個數 static void sta public static void main(String[] args) { // 測試排序 Random r = new Random(); int arr[] = new

基於java實現Word Count功能

不可 運用 loading test http result bsp post 格式 1. 項目地址: https://gitee.com/zhengzhibin/wordcount 2. 項目簡介 WordCount的需求可以概括為:對程序設計語言源文件統計字符數、單詞數

使用java實現快速排序(我認為是最簡單最容易理解的版本)

一切都在程式碼和註釋之中。複製貼上就能跑,邊跑邊看才是最愉快的。 所以,話不多說,放碼過來。   public class QuickSort { public static void main(String[] args) { int x[]={6,1,2,7,9,1

分治法 實現歸併排序

分治法 實現歸併排序 1 問題描述   二路歸併排序,不仔細詳解了。之所以記錄是因為被坑了, 詳細看程式碼 2 python 實現 def merge(row_data, result_data, start, center, end): i = start j = center