【发布时间】:2015-05-02 02:31:43
【问题描述】:
目前对我的递归合并排序程序感到震惊,我一直在寻找问题所在,但似乎找不到。
package mergesort;
import java.util.ArrayList;
public class MergeSort {
public MergeSort() {
// TODO Auto-generated constructor stub
}
public static <T extends Comparable<? super T>> void mergesort(T[] list, int n)
{
mergeSort(list,0,n-1);
}
static <T extends Comparable<? super T>>
void mergeSort(T[] tempArray, int firstHalfSorted, int secondHalfSorted){
T[] temp = (T[]) new Comparable <?>[tempArray.length];
mergeSort(tempArray, temp, firstHalfSorted, secondHalfSorted);
}
private static <T extends Comparable<? super T>>
void mergeSort (T[ ] tempArray, T[] a, int firstHalfSorted, int secondHalfSorted){
if (firstHalfSorted < secondHalfSorted)
{
int mid = (firstHalfSorted + secondHalfSorted) / 2;
mergeSort(tempArray,a,firstHalfSorted, mid);
mergeSort(tempArray,a,mid+1, secondHalfSorted);
if(tempArray[mid].compareTo(tempArray[mid+1])>0)
merge(tempArray,a,firstHalfSorted, mid, secondHalfSorted);
}
}
private static <T extends Comparable<? super T>>
void merge(T[] a, T[] tempArray, int firstHalfSorted, int mid, int secondHalfSorted)
{
int bhalf1 = firstHalfSorted;
int ehalf1 = mid;
int bhalf2 = mid + 1;
int ehalf2 = secondHalfSorted;
int j = 0;
for(;(bhalf1 <= ehalf1) && (bhalf2 <= ehalf2); j++)
{
if (a[bhalf1].compareTo(a[bhalf2]) < 0)
{
tempArray[j] = a[bhalf1];
bhalf1++;
}
else
{
tempArray[j] = a[bhalf2];
bhalf2++;
}
for(;bhalf1 <= ehalf1; bhalf2++, j++)
tempArray[j] = a[bhalf1];
for(;bhalf2 <= ehalf2; bhalf2++, j++)
tempArray[j] = a[bhalf2];
for(j = firstHalfSorted; j <= secondHalfSorted; j++)
a[j] = tempArray[j];
}
}
}
这里是应该发生的事情的示例
排序前: 泽克 鲍勃 阿里 约翰 乔迪 杰米 账单 抢 泽克 克莱顿
排序后: 阿里 账单 鲍勃 克莱顿 杰米 乔迪 约翰 抢 泽克 泽克
我做的主要驱动也在这里
package mergesort;
import java.util.ArrayList;
import java.util.Arrays;
public class Driver <T extends Comparable<? super T>>{
public Driver() {
// TODO Auto-generated constructor stub
}
public static <T> void main(String[] args) {
String array[] = new String[] {"Zeke,"Bob","Ali","John","Jody","Jamie","Bill","Rob", "Zeke", "Clayton"};
MergeSort sortList = null;
sortList.mergeSort(array,0,10);
for(int a=0;a<array.length;a++)
System.out.println(array[a]);
}
}
【问题讨论】:
-
你的输出是什么?
-
您应该为每次迭代都打印一份,这将有助于您了解实际情况
-
@Ajoy "线程 "main" 中的异常 java.lang.ArrayIndexOutOfBoundsException: 9 at mergesort.MergeSort.merge(MergeSort.java:59) at mergesort.MergeSort.mergeSort(MergeSort.java:32)在 mergesort.MergeSort.mergeSort(MergeSort.java:29) 在 mergesort.MergeSort.mergeSort(MergeSort.java:29) 在 mergesort.MergeSort.mergeSort(MergeSort.java:29) 在 mergesort.MergeSort.mergeSort(MergeSort.java: 19) 在mergesort.Driver.main(Driver.java:15) "