不多bb,咱直接上代码,代码里有解释
代码如下:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class MergSort {
public final static int N = (int) (1e6 + 10);
// public static int[] tem = new int[N];
static int[] temp = new int[N];
public static void main(String[] args) throws IOException {
// int[] arr = {2,4,3,5,7,6};
// int n = arr.length-1;
//以控制台进行输入
InputStreamReader in = new InputStreamReader(System.in);//控制台进行输入
//进行输入但这里一般是来年再一起写 BufferedReader bu = new BufferedReader(new InputStreamReader(systen.in));
BufferedReader bu = new BufferedReader(in);
String st = bu.readLine();//数据的读取
String ar[] = st.split(" ");//将字符串转化成字符串数组
int num01= st.length();
int[] arr = new int[num01];
for ( int i = 0; i < num01 ; i++){
arr[i] = Integer.parseInt((String.valueOf(st.charAt(i))));
}
Merg_Sort(arr, 0, arr.length-1);
for (int i = 0; i < arr.length;i++){
System.out.print(arr[i]+" ");
}
}
private static void Merg_Sort(int[] arr, int l, int r) {
if(l >= r) return ;
//1.找到中间位置的数作基数
int mid = r+l >> 1;
//2.进行排序---左边的
Merg_Sort(arr, l, mid);
//2.进行排序---右边的
Merg_Sort(arr, mid+1, r);
//3.进行归并
int k = 0;//进行记录我们新数组里的数据个数,新数组----temp数组
int i = l;//左半边起点的指针
int j = mid+1;//右边起点的指针
while (i <= mid && j <= r){
if(arr[i] <= arr[j]) {
temp[k++]=arr[i++];
}else{
temp[k++] = arr[j++];
}
}
//进行判断,如果左半边没有循环完,则加到temp数组后面
while (i <= mid) temp[k++] = arr[i++];
//相应的如果有半边没有循环完,则加到temp 数组后面
while (j <= r) temp[k++] = arr[j++];
//最后进行复制
for ( i = l, j = 0; i <= r; i++,j++){
arr[i] = temp[j];
}
}
}