package GBPX;
import java.util.Arrays;
public class GuiBingPaiXu {
public static void main(String[] args) {
int[] num = {8, 4, 5, 7, 1, 3, 6, 2};
System.out.println(Arrays.toString(FZ(num)));
}
public static int[] FZ(int[] num) {
if (num.length == 1) {
return num;
}
int left = 0;
int right = num.length;
int mid = (left + right) / 2;
int[] leftnum = new int[(mid - left)];
int[] rightnum = new int[(right - mid)];
for (int i = 0; i < mid; i++) {
leftnum[i] = num[left + i];
}
for (int i = 0; i < right - mid; i++) {
rightnum[i] = num[mid + i];
}
//分治左
int[] changeleft = FZ(leftnum);
//分治右
int[] changeright = FZ(rightnum);
//两个数组合并
int[] res = px(changeleft, changeright);
return res;
}
//两数组比较合并
public static int[] px(int[] l, int[] r) {
int ls = 0;
int rs = 0;
int[] res = new int[l.length + r.length];
int rr = 0;
while (ls >= 0 && ls < l.length && rs >= 0 && rs < r.length) {
if (l[ls] < r[rs]) {
res[rr] = l[ls];
rr++;
ls++;
} else {
res[rr] = r[rs];
rr++;
rs++;
}
}
if (ls < l.length) {
while (ls < l.length) {
res[rr] = l[ls];
rr++;
ls++;
}
} else {
while (rs < r.length) {
res[rr] = r[rs];
rr++;
rs++;
}
}
return res;
}
}