1、将序列中待排序数字分为若干组,每个数字分为一组
2、将若干个组两两合并,保证合并后的组是有序的
3、重复第二步操作直到只剩下一组,排序完成
这个代码有点难理解
public static void mergeSort(int arry[], int left, int middle, int right) {
int temp[] = new int[right-left+1];
for(int i=left; i<=right; i++) {
temp[i-left] = arry[i];
}
int i=left, j=middle+1;
for(int k=left; k<=right; k++) {
if(i>middle && j<=right) {
arry[k] = temp[j-left];
j++;
}else if(j>right && i<=middle) {
arry[k] = temp[i-left];
i++;
}else if(temp[i-left] > temp[j-left]) {
arry[k] = temp[j-left];
j++;
}else if(temp[i-left] <= temp[j-left]) {
arry[k] = temp[i-left];
i++;
}
}
}
public static void merge(int arry[], int left, int right) {
if(left >= right) {
return;
}
int middle = (left + right)/2;
merge(arry, left, middle);
merge(arry, middle+1, right);
mergeSort(arry, left, middle, right);
}