[英]Sorting an array recursively in Java with even numbers appearing in front of array.
我正在使用一種方法來對數組進行排序,其中偶數在數組的前面,而奇數在數組的后面。 我的作業要求我使用遞歸來完成此任務。 當我嘗試打印排序后的數組時,它只是打印出未排序的數組。 我究竟做錯了什么?
left
變量從索引0
開始, right
變量從索引結尾開始。 然后將它們都進行比較,如果left
是一個奇數,而right
是一個偶數,則它們交換值。 如果left
結果為偶數,則不進行交換,它指向數組中的下一個索引。 如果right
變成一個奇數,則不會發生交換,它指向數組中的下一個索引。 這樣做直到所有偶數都在數組的右邊。
我正在
“線程“主” java.lang.StackOverflowError中的異常”。
import java.util.*;
public class Problem2{
//i=left
//j=right
//first i tried to shift the whole thing
//have all even numbers pop to the front of array when even
public static int[] callme(int[] arry, int left, int right){
int temp;
if(left>=right) //base case, return array
return arry;
else if(arry[left]%2!=0 && arry[right]%2==0){//if match, do the swap
temp=arry[left];
arry[left]=arry[right];
arry[right]=temp;
return callme(arry, left++, right--);
}
else{
if(arry[right]%2!=0){//if right side is on odd #, then decrease index
return callme(arry, left, right--);
}
if(arry[left]%2==0){//if left side is on even #, then increase index
return callme(arry, left++, right);
}
}
return arry;
}
public static void main(String[] args){
//int index=0;
int[] arry={3,5,6,8};
int[] newarry=callme(arry, 0, arry.length-1);
System.out.print("The new sorted array is: ");
for(int i=0; i<newarry.length;i++){
System.out.print(newarry[i]+" ");
}
}
}
left++
與left + 1
。 如果要使用一個高一個left
參數遞歸調用該方法,請使用left + 1
進行調用。
在此語句中:
return callme(arry, left++, right--);
它的工作方式是這樣的:程序將保存的當前值left
,加1到left
,但隨后使用,然后才加作為參數遞歸調用保存的價值。 該right--
參數的工作方式相同。 因此,當callme
調用自身時,它使用與調用時完全相同的參數進行調用。 因此,您永遠都無法掌握基本情況。
(別的東西,你應該知道的遞歸:每次遞歸方法調用本身,它都會有自己的局部變量的副本,其中包括參數所以,即使第一種方法增加。 left
,有什么沒有影響left
會進行遞歸調用時,因為遞歸方法有其自己的left
。)
如果您只希望偶數位於頂部,則無需左右移動。
您可以這樣做:
int temp;
for (int i = 0; i < array.length; i++)
if (array[i] % 2)
for (int j = i + 1; j < array.length; j++)
if !(array[j] % 2) {
temp = array[j];
array[j] = array[i];
array[i] = temp;
j = array.length;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.