前言:
此段代码merge方法中使用了一个System提供了一个静态方法arraycopy(),我们可以使用它来实现数组之间的复制
其函数原型是: `public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)`
//src:源数组;
// srcPos:源数组要复制的起始位置;
//dest:目的数组;
// destPos:目的数组放置的起始位置;
// length:复制的长度。
// 其调用方式是:
System.arraycopy((Object src, int srcPos, Object dest, int destPos, int length);
注意:src and dest都必须是同类型或者可以进行转换类型的数组
----递归实现归并排序
====JAVA代码实现
static void merge_sort(int[] a, int left, int right) { //利用递归将这个数组分组,直到不可再分为止
//【数组a】存放的是需要排序的数组,【left】是【a数组】起始的指针,【right】【数组a】未尾的指针
if (right <= left)
return;
int mid = left + (right-left) / 2;
merge_sort(a, left, mid);
merge_sort(a, mid + 1, right);
merge(a, left, mid, right);
static void merge(int[] a, int left, int mid, int right){ //利用一个线性的方式让每一个分组以从小到大的方式排序
int[] temp = new int [a.length];
int index = 0;
int p = mid + 1;
int left_1 = left;
while (left_1 <= mid && p <= right) {
if (a[left_1] > a[p]) { // 比较左右两部分的元素,哪个小,把那个元素填入temp中
temp[index++] = a[p++];
} else {
temp[index++] = a[left_1++];
}
}
// 上面的循环退出后,把剩余的元素依次填入到temp中
// 以下两个while只有一个会执行
while (left_1 <= mid) {
temp[index++] = a[left_1++];
}
while (p <= right) {
temp[index++] = a[p++];
}
// 把最终的排序的结果复制给原数组
System.arraycopy(temp, 0, a, left, right - left + 1); //这里运用了jdk自带的一个方法
//
}
}