我正在嘗試將患者姓名排序到視圖串列中,其中顯示按字母順序排序的患者串列。但是,在使用歸并排序(必需)之后,它最多只對四個元素進行排序,然后才會覆寫其他名稱。如果我可以在分類時將疾病與患者聯系起來,那也會很有幫助。
我嘗試使用所需的合并排序,按照步驟操作后,合并排序出現故障并且沒有正確顯示名稱。當元素少于 3 個時,排序將正常運行,但如果超過三個,它將覆寫其他元素。
這是我的代碼:
public static void mergeSort(ArrayList<String> a, Integer from, Integer to)
{
if(from == to)
{
return;
}
Integer mid = (from to)/2;
mergeSort(a, from, mid);
mergeSort(a, mid 1, to);
merge(a, from, mid, to);
}
public static void merge(ArrayList<String> a, Integer from, Integer mid, Integer to)
{
Integer n = to - from 1;
ArrayList<String> b = new ArrayList<>(n);
Integer i1 = from;
Integer i2 = mid 1;
Integer j = 0;
while(i1<= mid && i2 <= to)
{
if(a.get(i1).compareTo(a.get(i2))<0)
{
b.add(a.get(i1));
i1 ;
}
else
{
b.add(a.get(i2));
i2 ;
}
j ;
}
while (i1 <= mid)
{
b.add(a.get(i1));
i1 ;
j ;
}
while (i2 <= to)
{
b.add(a.get(i2));
i2 ;
j ;
}
for(j = 0; j< n; j )
{
a.add(from j, b.get(j));;
}
}
uj5u.com熱心網友回復:
您應該使用 set,而不是在最后一步中添加。如果您嘗試除錯合并程序并觀察“a”內容,您會看到它在每次合并時增長。
for(j = 0; j< n; j )
{
a.set(from j, b.get(j));;
}
此外,在 Java 中,對介面而非具體類進行編程被認為是一種很好的風格,因此您可能希望在變數宣告中將 ArrayList 替換為 List。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/528343.html
標籤:爪哇排序递归归并排序
