我遇到了自下而上的合并问题。排序/合并时遇到问题。目前的代码包括:
public void mergeSort(long[] a, int len) {
long[] temp = new long[a.length];
int length = 1;
while (length < len) {
mergepass(a, temp, length, len);
length *= 2;
}
}
public void mergepass(long[] a, long[] temp, int blocksize, int len) {
int k = 0;
int i = 1;
while(i <= (len/blocksize)){
if(blocksize == 1){break;}
int min = a.length;
for(int j = 0; j < blocksize; j++){
if(a[i*j] < min){
temp[k++] = a[i*j];
count++;
}
else{
temp[k++] = a[(i*j)+1];
count++;
}
}
for(int n = 0; n < this.a.length; n++){
a[n] = temp[n];
}
}
}
答案 0 :(得分:2)
明显的问题:
i
永远不会增加。if(a[i*j] < min)
应该做的吗?我说不出来。)i
和j
相乘?this.a.length
?样式问题:
mergeSort()
将len
作为参数,即使数组具有隐式长度。更糟糕的是,该功能还使用a.length
和length
。挑剔: