我一直在努力合併排序遞歸代碼,我碰到了一個減速帶。我已經通過互聯網和我的算法本身在紙上多次,我似乎無法弄清楚這個問題。遞歸合併排序Java程序
public static int[] mergesort(int[] data, int low, int high)
{
int middle = (high+low)/2;
if (middle==low)
{
int[] data2 = new int [1];
data2[0]=data[middle];
return data2;
}
else
{
int[] firstHalfSorted = mergesort(data, low, middle);
int[] secondHalfSorted = mergesort(data, middle+1, high);
return (merge(firstHalfSorted, secondHalfSorted));
}
}
public static int[] merge(int[] firstHalfSorted, int[] secondHalfSorted)
{
int[] SortedArray = new int[firstHalfSorted.length+secondHalfSorted.length];
int m = 0;
int n = 0;
int count = 0;
while (m<firstHalfSorted.length && n<secondHalfSorted.length)
{
if (firstHalfSorted[m]>secondHalfSorted[n])
{
SortedArray[count]=secondHalfSorted[n];
count++;
n++;
}
else if (firstHalfSorted[m]<secondHalfSorted[n])
{
SortedArray[count]=firstHalfSorted[m];
count++;
m++;
}
}
if (m!=firstHalfSorted.length)
{
while(m<firstHalfSorted.length){
SortedArray[count]=firstHalfSorted[m];
count++;
m++;
}
}
if (n!=secondHalfSorted.length)
{
while(n<secondHalfSorted.length){
SortedArray[count]=secondHalfSorted[n];
count++;
n++;
}
}
return SortedArray;
}
有代碼。問題出在一個文本輸入文件中,數字爲3,9,7,2,10,5,1,8,代碼只對每個其他數字排序,分別是3,7和10,1,然後是3, 7,1,10。
按我所有的想法,它應該排序3,9然後7,2等,然後,3,9,7,2和10,5,1,8等等,但它不!你們能幫我出去嗎?
你歸併方法看起來不一樣/錯誤 – smk 2013-03-26 05:00:38
任何關於我能做什麼想法? – 2013-03-26 05:18:46
請只發布相關的代碼。在我看來,你對文件I/O沒有問題。然後,只需在代碼中初始化示例數組,並從代碼示例中刪除不相關的文件讀/寫代碼。不相關的代碼只是表明你不願意付出任何努力來解決你的問題。 – 2013-03-26 05:29:39