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的下标?解决 无用评论 打赏 举报
悬赏问题
- ¥15 python的qt5界面
- ¥15 无线电能传输系统MATLAB仿真问题
- ¥50 如何用脚本实现输入法的热键设置
- ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
- ¥30 深度学习,前后端连接
- ¥15 孟德尔随机化结果不一致
- ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
- ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
- ¥15 谁有desed数据集呀
- ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100