![](/img/trans.png)
[英]While loop is not working as expected. Everything seems to be correct. How do I fix this problem?
[英]Merge Sort in Java not working as expected. Trying to do it without a while loop
我整天都在努力,不知道為什么這不起作用。 排序正在復制某些元素,並對數組進行了排序,但是我看不到是什么原因造成的。 試圖追蹤它,但無法追蹤。
import java.io.FileNotFoundException;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws FileNotFoundException {
int[] array = new int[10];
for(int i = 0; i < array.length; i++) {
array[i] = (int) (Math.random()*5);
}
int[] temp = array.clone();
int l = 0;
int r = array.length-1;
System.out.println("unsorted "+Arrays.toString(array));
mergeSort(array, temp, l, r);
System.out.println("sorted "+Arrays.toString(array));
}
public static void mergeSort(int[] array, int[] temp, int p, int r) {
int q = (p + r)/2;
if(p < r) {
mergeSort(array, temp, p, q);
mergeSort(array, temp, q+1, r);
merge(array, temp, p, q, r);
}
}
public static void merge(int[] array, int[] temp, int p, int q, int r) {
int i = p;
int j = q + 1;
for(int k = p; k < r; k++){
if(i > q){
array[k] = temp[j];
j++;
} else if(j > r) {
array[k] = temp[i];
i++;
}
else if(temp[j] < temp[i]) {
array[k] = temp[j];
j++;
} else {
array[k] = temp[i];
i++;
}
}
}
}
您的代碼有兩個問題:
您的for
循環應包含r
因為它是最后一個索引:
for( int k = p; k <= r; k++ )
您必須在合並操作結束時復制回temp
:
for ( int k = p; k <= r; k++ ) { temp[ k ] = array[ k ]; }
要么:
System.arraycopy( array, p, temp, p, r + 1 - p );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.