在这个程序中,我使用归并排序来对奥运奖牌进行排序。
我的代码似乎有些问题,因为有时会给我一个java.lang.ArrayIndexOutOfBoundsException错误,而有时则不会。
简单介绍一下背景:
我有一个方法来随机生成奥运国家和他们在积分榜上赢得的奖牌。它以以下形式返回包含结果的String[]数组:
CAN 1 1 1
USA 1 1 2
GBR 0 0 1
CHN 0 0 2
然而,积分榜需要按金牌、银牌和铜牌的顺序排列。所以它应该像这样:
USA 1 1 2
CAN 1 1 1
CHN 0 0 2
GBR 0 0 1
使用冒泡排序和快速排序对积分榜进行排序没有问题,但是归并排序不行。有时它可以正常工作,但更多的时候它会给我一个ArrayIndexOutOfBoundsException错误。
任何想法为什么这段代码没有正常工作?谢谢!
我的代码似乎有些问题,因为有时会给我一个java.lang.ArrayIndexOutOfBoundsException错误,而有时则不会。
简单介绍一下背景:
我有一个方法来随机生成奥运国家和他们在积分榜上赢得的奖牌。它以以下形式返回包含结果的String[]数组:
CAN 1 1 1
USA 1 1 2
GBR 0 0 1
CHN 0 0 2
然而,积分榜需要按金牌、银牌和铜牌的顺序排列。所以它应该像这样:
USA 1 1 2
CAN 1 1 1
CHN 0 0 2
GBR 0 0 1
使用冒泡排序和快速排序对积分榜进行排序没有问题,但是归并排序不行。有时它可以正常工作,但更多的时候它会给我一个ArrayIndexOutOfBoundsException错误。
public static void main(String[] args) {
Olympic_Results score = new Olympic_Results();
//print a return value of an array
String[] countries = score.OlympicResult(7); //input how many game results
mergeSort(countries, 0, countries.length - 1);
for (String value:countries)
System.out.println(value);
}
public static void mergeSort(String array[], int lo, int n) {
int low = lo;
int high = n;
if (low >= high) {
return;
}
int middle = (low + high) / 2;
mergeSort(array, low, middle);
mergeSort(array, middle + 1, high);
int end_low = middle;
int start_high = middle + 1;
while ((lo <= end_low) && (start_high <= high)) {
if ((array[low].substring(4,8)).compareTo(array[high].substring(4,8)) > 0) {
low++;
}
else {
String Temp = array[start_high];
for (int k = start_high - 1; k >= low; k--) {
array[k + 1] = array[k];
}
array[low] = Temp;
low++;
end_low++;
start_high++;
}
}
}
任何想法为什么这段代码没有正常工作?谢谢!
camelCase
。类通常使用TitleCase
而不使用下划线。 - Duncan Jones