一、效果图
二、源代码
package sy3;
import java.util.ArrayList;
/**
* @author
*
*/
public class Sy3_1 {
static void merge(int a[], int low, int mid, int high) {
int i = low;// 第一个子数组开始下标
int j = mid + 1;// 第二个子数组开始下标
// 动态分配一个数组,数组的字节数=数组元素的个数*每个元素的字节数
int[] temp = new int[high - low + 1];
// 临时数组的下标
int k = 0;
// 循环把最小的值依次放入临时数组,且左右两边的顺序已经排好
while (i <= mid && j <= high)
if (a[i] < a[j]) {
temp[k] = a[i];
k++;
i++;
} else {
temp[k] = a[j];
k++;
j++;
}
// 把剩余的数字拷贝到临时数组
while (i <= mid) {
temp[k] = a[i];
k++;
i++;
}
while (j <= high) {
temp[k] = a[j];
k++;
j++;
}
// 合并结束(临时数组 拷贝回 a[])
for (i = low, k = 0; i <= high; i++, k++) {
a[i] = temp[k];
}
}
static void mergeSort(int a[], int start, int end) {
if (start < end) {
int mid = (start + end) / 2;
mergeSort(a, start, mid);// 对左边进行分割
mergeSort(a, mid + 1, end);// 对右边进行分割
merge(a, start, mid, end);// 合并
}
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
int a[] = { 2, 8, 4, 5, 7, 3, 1 };
mergeSort(a, 0, 6);
for (int q = 0; q < 7; q++) {
System.out.println(a[q]);
}
}