public class GuiBingTest {
//得到最大值
public static int getMax(int[] a,int L,int R){
if (L == R) {
return a[L];
}
int mid = (L + R) / 2;
int maxleft = getMax(a, L, mid);
int maxright = getMax(a, mid + 1, R);
return Math.max(maxleft,maxright);
}
//归并排序
public static void guibing(int[]a,int L,int R){
if (L==R) {
return;
}
int mid = (R + L) / 2;
guibing(a,L,mid);
guibing(a,mid+1,R);
jsort(a,L,mid,R);
}
//将两个有序数组合并成一个
public static void jsort(int[] a,int L,int mid,int R) {
int[] b = new int[R - L + 1];
int i = 0;
int p1 = L;
int p2 = mid + 1;
while (p1 <= mid && p2 <= R) {
b[i++] = a[p1] <= a[p2] ? a[p1++] : a[p2++];
}
while (p1 <= mid) {
b[i++] = a[p1++];
}
while (p2 <= R) {
b[i++] = a[p2++];
}
for (i=0;i<b.length;i++) {
a[L + i] = b[i];
}
}
public static void main(String[] args) {
int[] a = {1, 3, 5, 7, 9, 2, 4, 6, 8, 9, 9};
// System.out.println(getMax(a, 0, a.length-1));
guibing2(a, 0, a.length - 1);
for (int w:a){
System.out.print(w+" ");
}
}
}
归并排序:
采用递归,先将数组两两拆分成小数组,直至分到长度为1(为长度为1的有序数组)
然后将排好序的数组两两合并,从小到大,直至整个数组.排好序
先递归拆分,再合并