歸併排序(java機試題)
題目要求;輸入一個陣列,以空格間隔。要求用歸併排序從小到大排序並輸出。
java實現如下:
import java.util.Scanner;
public class MergeSort
{
/**
* 歸併排序
*/
public static void main(String[] args)
{
Scanner str = new Scanner(System.in);
String[] strlist = str.nextLine().split(" ");//這裡想獲得字串陣列,從而獲得輸入數值的個數
int[] list = new int[strlist.length];//因為java中陣列需要在使用前給定大小,大小從字串陣列獲得
for (int i = 0; i < strlist.length; i++)
{
list[i] = Integer.parseInt(strlist[i]);
}
for (int i = 0; i < list.length; i++)
{
System.out.print(list[i] + " ");
}
System.out.println();
//bubbleSort(list);//呼叫函式對陣列進行排序
//insertSort(list);
//selectSort(list);
mergeSort(list);
for (int e : list)
{
System.out.print(e + " ");
}
}
//歸併排序,分為拆分和合並兩個部分
public static void mergeSort(int[] list)
{
if (list.length > 1)
{
//前半部分
int[] firstHalf = new int[list.length / 2];
System.arraycopy(list, 0, firstHalf, 0, list.length / 2);//用空間換時間
mergeSort(firstHalf);
//後半部分
int[] secondHalf = new int[list.length - list.length / 2];
System.arraycopy(list, list.length / 2, secondHalf, 0, list.length - list.length / 2);
mergeSort(secondHalf);
//呼叫合併函式
merge(firstHalf, secondHalf, list);
}
}
//歸併排序第二部分,合併
public static void merge(int[] list1, int[] list2, int[] list)
{
int current1 = 0, current2 = 0, current3 = 0;//用於計算函式輸入的三個陣列的下標
while (current1 < list1.length && current2 < list2.length)
{
if (list1[current1] < list2[current2])
{
list[current3++] = list1[current1++];
}
else
{
list[current3++] = list2[current2++];
}
}
while (current1 < list1.length)
{
list[current3++] = list1[current1++];
}
while (current2 < list2.length)
{
list[current3++] = list2[current2++];
}
}
}
相關文章
- java歸併排序Java排序
- 歸併排序加例題排序
- 歸併排序排序
- 快速排序&&歸併排序排序
- 四、歸併排序 && 快速排序排序
- BAT 經典演算法筆試題 —— 磁碟多路歸併排序BAT演算法筆試排序
- 歸併排序--排序演算法排序演算法
- 排序演算法(歸併排序)排序演算法
- 歸併排序--二路排序排序
- 歸併排序和基數排序排序
- 排序演算法__歸併排序排序演算法
- 排序演算法:歸併排序排序演算法
- 排序演算法 - 歸併排序排序演算法
- 利用java實現插入排序、歸併排序、快排和堆排序Java排序
- 歸併排序 js demo排序JS
- Sort排序專題(7)歸併排序(MergeSort)(C++實現)排序C++
- 排序演算法之 '歸併排序'排序演算法
- php實現 歸併排序,快速排序PHP排序
- php插入排序,快速排序,歸併排序,堆排序PHP排序
- 歸併排序 nO(lgn) 稽核中排序
- 歸併排序——C語言排序C語言
- go 實現歸併排序Go排序
- 氣泡排序、歸併排序與快速排序比較排序
- 歸併排序的簡單理解排序
- 歸併排序 2020-09-20排序
- 演算法之歸併排序演算法排序
- 使用 Swift 實現歸併排序Swift排序
- 演算法:排序連結串列:歸併排序演算法排序
- 排序演算法之「歸併排序(Merge Sort)」排序演算法
- 三種語言實現歸併排序(C++/Python/Java)排序C++PythonJava
- 淺談歸併排序:合併 K 個升序連結串列的歸併解法排序
- 演算法(氣泡排序,快排,歸併排序)演算法排序
- rust-algorithms:9-歸併排序RustGo排序
- 歸併排序詳解及應用排序
- 歸併排序(C++_分治遞迴)排序C++遞迴
- 歸併排序MergeSort的C實現排序
- 演算法學習 – 歸併排序演算法排序
- HDU 2689 【歸併排序求逆序對】排序
- 演算法學習 - 歸併排序演算法排序