用Java實現歸併排序
//每一次的歸併操作
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 && j <= h; k++) {
if (a[l] < a[j]) {
b[k] = a[l];
l++;
} else {
b[k] = a[j];
j++;
}
}
if (l <= m) {
for (i = 0; i <= m - l; i++) {
b[k + i] = a[l + i];
}
}
if (j <= h) {
for (i = 0; i <= h - j; i++) {
b[k + i] = a[j + i];
}
}
}
//確定歸併怎麼執行
private void mergeSort(int[] a, int[] b, int s, int i, int n) {
while (i < n - s) {
if (i + 2 * s - 1 < n) {
merge(a, b, i, i + s - 1, i + 2 * s - 1);
} else {
merge(a, b, i, i + s - 1, n - 1);
}
i = i + 2 * s;
}
if (i < n) {
for (int j = 0; j < n - i; j++) {
b[i + j] = a[i + j];
}
}
for (int x = 0; x <= 9; x++) {
Log.e("a[]", String.valueOf(b[x]));
}
Log.e("james", "*******");
}
public void startSort(int[] a, int[] b, int s, int i, int n) {
while (s < n) {
mergeSort(a, b, s, i, n);
s = s * 2;
mergeSort(b, a, s, i, n);
s = s * 2;
}
}
相關推薦
用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實現歸併排序:
歸併排序:顯示不停的分割,一次分一半。。。直到分到全部為單個的時候,然後在慢慢合併回來。 程式碼: package test2018926; public class MergeSort { public static void main(String[] args) {
用java實現各種排序演算法
package Com.Sort; /** * 各種高階排序方法的實現 * * @author Jane */ public class AdvanceSort { // 列印陣列 public static <T extends Comparable<?
Java實現--歸併排序(遞迴)
《Java資料結構和演算法》如此描述分治演算法: 把一個大問題分成兩個相對來說更小的問題,並且分別解決每一個小問題,對每一個小問題的解決方案是一樣的:把每個小問題分成兩個更小的問題,並且解決它們。這個過程一直持續小去知道達到易於求解的基值情況,就不用再繼續分了。 時間複雜度:
Java——用Java實現氣泡排序,選擇排序,快速排序和二分查詢
在學習C語言時,就有講過這三個排序演算法和二分查詢的演算法。 以下是用Java來實現氣泡排序(Bubble Sort)演算法,選擇排序(Selection Sort),快速排序(Quick Sort)和二分查詢(Binary Search) package pra_07;
java實現歸併排序演算法
前面我們講了歸併排序演算法,接下來我們來用java程式碼實現唄,如下 package ttt; import java.util.Arrays; public class MergeSort { public static int[] lastMergeSort(in
用java實現氣泡排序和選擇排序
氣泡排序:依次比較兩個相鄰的元素,將值大的元素交換至右端,一輪比較過後,最大的元素在最右端。 public class BubbleSort { public static void main(String[] args) { int[] arr
java實現歸併排序(思想與實現)
歸併排序歸併排序是採用分治法的一個非常典型的應用。歸併排序的思想就是先遞迴分解陣列,再合併陣列。將陣列分解最小之後,然後合併兩個有序陣列,基本思路是比較兩個陣列的最前面的數,誰小就先取誰,取了後相應的指標就往後移一位。然後再比較,直至一個數組為空,最後把另一個數組的剩餘部分複
排序演算法Java實現——歸併排序
歸併排序(也可以叫合併排序),其實歸併排序的本質就是合併排序。 它是與插入排序、交換排序、選擇排序不同的一類排序方法,不同之處在於: 它要求:待排序序列是由若干個有序子序列組成。 那麼究竟什麼是歸併排序呢?歸併這個詞到底是什麼意思? 首先可以理解為就是合併,然後就是這個詞的
一種簡單的用java實現快速排序(Quicksort)
1,快速排序(Quicksort)是對氣泡排序的一種改進。對資料量越大,資料分佈越混亂的,一般認為是效能最好的。快排是分治思想的一種體現,把大的問題細化成小問題,把小問題細化成更小的問題,最終把問題縮小到一定規模內,可解決。 2,快排演算法思路就是,先取一個數作為關鍵資料(key一般
JAVA實現歸併排序
歸併排序(Merge)是將兩個(或兩個以上)有序表合併成一個新的有序表,即把待排序序列分為若干個子序列,每個子序列是有序的。然後再把有序子序列合併為整體有序序列。 歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法(Divide and C
基於Java實現歸併排序
歸併排序 public static void mergeSort(int[] arr) { if (arr == null || arr.length < 2) { return; }
3. 排序通常有多種演算法,如氣泡排序、插入排序、選擇排序、希爾排序、歸併排序、快速排序,請選擇任意2種用java實現 [分值:20] 您的回答:(空) (簡答題需要人工評分)
3. 排序通常有多種演算法,如氣泡排序、插入排序、選擇排序、希爾排序、歸併排序、快速排序,請選擇任意2種用java實現 [分值:20] 您的回答:(空) (簡答題需要人工評分) package com.interview; /** * 各種排序演算法 */
用Java實現的選擇排序和冒泡排序
auth main sta -i str public java index 選擇 選擇排序 package cn.hxd.sort; /** * 選擇排序 * @author Administrator * */ public class SelectionSo
數據結構(三) 用java實現七種排序算法。
得到 最簡 上傳 根節點 位置 中間 log 說明 堆排序 很多時候,聽別人在討論快速排序,選擇排序,冒泡排序等,都覺得很牛逼,心想,臥槽,排序也分那麽多種,就覺得別人很牛逼呀,其實不然,當我們自己去了解學習後發現,並沒有想象中那麽難,今天就一起總結一下各種排序
java算法面試題:排序都有哪幾種方法?請列舉。用JAVA實現一個快速排序。選擇冒泡快速集合至少4種方法排序
算法 err div println rda print 算法面試 ++ 快速排序 package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util
用java實現七種排序演算法。
很多時候,聽別人在討論快速排序,選擇排序,氣泡排序等,都覺得很牛逼,心想,臥槽,排序也分那麼多種,就覺得別人很牛逼呀,其實不然,當我們自己去了解學習後發現,並沒有想象中那麼難,今天就一起總結一下各種排序的實現原理並加以實現。 -WH 一、文章
【Java】 歸併排序的非遞迴實現 資料結構與演算法合集 資料結構與演算法合集
歸併排序可以採用遞迴方法(見:歸併排序),但遞迴方法會消耗深度位O(longn)的棧空間,使用歸併排序時,應該儘量使用非遞迴方法。本文實現了java版的非遞迴歸併排序。 更多:資料結構與演算法合集 思路分析 遞迴排序的核心是merge(int[] arr, int start, int mid,
用java實現排序和查詢
氣泡排序 假設一個數組中有n個元素; 從陣列的第一個元素開始,中是比較與後一個元素,如果前一個元素大於後一個元素,就交換位置,否則繼續比較後面的元素,直到選出最大的元素。這樣的排序類似於水中的冒泡,越大的泡上升的速度越快。這樣一共比較n次,第i趟比較n-i-1次。 實現: pac