思路:
1.分为两段分别进行段内排序
(0,8)
(0,4)(5,8)
(0,2)(3,4)(5,6)(7,8)
(0,1)
2.合并,进行段间排序
java实现
public class MergeSort {
private static int [] nums = {5,9,8,7,1,2,4,3,6};
public static void main(String[] args) {
// TODO Auto-generated method stub
if(nums.length <= 0)
return ;
mergeSort(nums, 0, nums.length - 1);
for(int i = 0; i < nums.length; i ++)
{
System.out.print(nums[i] + " ");
}
}
public static void mergeSort(int [] data, int l, int r){
//递归终止条件
if(l >= r)
return;
int mid = l + (r - l)/2;
mergeSort(nums, l, mid);
mergeSort(nums, mid + 1, r);
merge(nums, l, mid, r);
}
public static void merge(int [] data, int l, int mid, int r){
int [] temp = new int[data.length];
int i = l, j = mid + 1, k = 0;
while(i <= mid && j <= r)
{
if(data[i] <= data[j]){
temp[k ++] = data[i ++];
}else {
temp[k ++] = data[j ++];
}
}
while(i <= mid)
{
temp[k ++] = data[i ++];
}
while(j <= r)
{
temp[k ++] = data[j ++];
}
//搬回去
for(int ii = 0; ii < k; ii ++){
data[l + ii] = temp[ii];
}
}
}