import java.util.*;
public class Solution {
public int[] mergeSort(int[] A, int n) {
sort(A,0,n-1);
return A;
}
public void sort(int[] data, int left, int right) {
if(left<right) {
int middle = (left+right)/2;
sort(data, left, middle);
sort(data, middle+1, right);
merge(data, left, middle, right);
}
}
public void merge(int[] data, int left, int middle, int right) {
int leftpos = left;
int leftend = middle;
int rightpos = middle+1;
int rightend = right;
int[] tmp = new int[rightend-leftpos+1];
for(int i=leftpos;i<tmp.length;i++) {
if(leftpos<=leftend&&rightpos<=rightend) {
if(data[leftpos]<data[rightpos]) {
tmp[i] = data[leftpos];
leftpos++;
}else {
tmp[i] = data[rightpos];
rightpos++;
}
}else if(leftpos<=leftend) {
tmp[i] = data[leftpos];
leftpos++;
}else if(rightpos<=rightend) {
tmp[i] = data[rightpos];
rightpos++;
}
}
for(int j=left;j<tmp.length;j++) {
data[j] = tmp[j];
}
}
}
1)for(int i=leftpos;i<tmp.length;i++) {
i是tmp数组的下标,leftpos是data数组的下标,毫无关系啊。
2)data[j] = tmp[j];
j能即做data的下标又做tmp的下标?
首先,这不是二分查找;算是合并排序。
使用递归算法的要点是设计后退出条件。sort 的退出条件存在问题,程序无法退出。
public void sort(int[] data, int left, int right) {
if(left int middle = (left+right)/2;
sort(data, left, middle);
sort(data, middle+1, right);
merge(data, left, middle, right);
}
else if (left == right +1)
{
if (data[left] > data[right]) {
int temp = data[left];
data[left] = data[right];
data[right]=data[left];
}
}
}
public void sort(int[] data, int left, int right) {
if(left < right + 1) {
int middle = (left+right)/2;
sort(data, left, middle);
sort(data, middle+1, right);
merge(data, left, middle, right);
}
else if (left == right +1) {
int temp = data[left];
data[left] = data[right];
data[right]=data[left];
}
}
public void sort(int[] data, int left, int right) {
if (left == right) {
// 可以忽略
}
else if (left == right + 1) {
int temp = data[left];
data[left] = data[right];
data[right]=data[left];
}
else if(left > right + 1) {
int middle = (left+right)/2;
sort(data, left, middle);
sort(data, middle+1, right);
merge(data, left, middle, right);
}
}
i<tmp.length-1 数组的下标从0开始的