import java.util.Arrays;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Collections;
import java.util.List;
public class TennisTournament {
public static void main (String [] args) {
Scanner input = new Scanner(System.in);
ArrayList <Integer> nums = new ArrayList<Integer>();
while (input.hasNextInt()) {
nums.add(input.nextInt());
}
System.out.println(nums);
tournament(nums);
}
public static void tournament(ArrayList <Integer> list) {
int midPoint = list.size()/2; // returns the index number of half of the lists size
int midPoint2 = list.size()/2;
if (list.size() != 1 || midPoint != 1) {
for (int i = 0; i < midPoint2; i++) { // while is bigger than mid point, increment by one
if (list.get(i) < list.get(midPoint)) {
Collections.swap(list, i, midPoint);
}
midPoint++;
}
System.out.println(list);
int newPoint = midPoint2/2;
midPoint2 = newPoint;
}
tournament(list);
}
}
好吧,所以我現在對遞歸的想法還很陌生,現在我所得到的只是一個無限循環。所以在第一種方法中,我想通過將它分成一半來分析數組,並且比較數組前半部分的第一個元素和數組後半部分的第一個元素,並且如果第二個元素是更大,然後交換這一切都工作正常,它正在做我想要它做的。 [3,5,8,2,1,7,6,4] [3,7,8,4,1,5,6,2] 我想要採取的下一步是我只想一半我正在處理的元素。所以在第一個例子中,我想要我工作的元素數量的一半,所以而不是0-list.size,我希望它在0-list.size()/ 2上工作,所以它只會交換前四個數字,然後再做兩次,直到中點變成一個數字。 只要對我如何實現這一點有一點了解就太好了。 不,不是功課。遞歸問題
我很想將其標記爲家庭作業。是嗎? – 2012-04-01 01:22:32
遞歸的「結束條件」是什麼?就目前來看,無論它只是將原始未修改列表中的「錦標賽()」永久地稱爲它,似乎都是如此。它從來沒有用較小的列表調用,也沒有任何東西阻止遞歸調用。 – 2012-04-01 01:22:47
@Brandon:注意問題的最後一行:_不,不是作業._ :) – sarnold 2012-04-01 01:27:14