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];
}
}
}
我写的归并排序请问在哪里出问题了?一直找不到哪里错了
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
5条回答 默认 最新
- Tiger_Zhao 2017-03-06 09:01关注
1)
for(int i=leftpos;i<tmp.length;i++) {
i是tmp数组的下标,leftpos是data数组的下标,毫无关系啊。
2)data[j] = tmp[j];
j能即做data的下标又做tmp的下标?解决 无用评论 打赏 举报