我在轉換我的排序類以使用數組列表對象時遇到問題。它目前正在排序對象,但我很難將其轉換爲排序Arraylists。下面是代碼:使用合併排序對數組列表排序
package Merge_Sort_Objects_ArrayList;
import java.util.ArrayList;
public class mergesort {
/**
* Merges two sorted portion of items array
* pre: items[start.mid] is sorted. items[mid+1.end] sorted. start <= mid <= end
* post: items[start.end] is sorted
*/
private static void merge(ArrayList <Comparable> items, int start, int mid, int end){
Comparable temp;
int pos1 = start;
int pos2 = mid + 1;
int spot = start;
ArrayList <Comparable> objectSort = items;
while (!(pos1 > mid && pos2 > end)){
if ((pos1 > mid) || ((pos2 <= end) &&(items[pos2].getRadius() < items[pos1].getRadius()))){
temp[spot] = items[pos2];
pos2 +=1;
}else{
temp[spot] = items[pos1];
pos1 += 1;
}
spot += 1;
}
/* copy values from temp back to items */
for (int i = start; i <= end; i++){
items[i] = temp[i];
}
}
/**
* mergesort items[start..end]
* pre: start > 0, end > 0
* post: items[start..end] is sorted low to high
*/
public static void mergesort(ArrayList <Comparable> items, int start, int end){
if (start < end){
int mid = (start + end)/2;
mergesort(items, start, mid);
mergesort(items, mid + 1, end);
merge(items, start, mid, end);
}
}
}
我現在已經開始將它轉換,但我被困在這一節就在這裏:
while (!(pos1 > mid && pos2 > end)){
if ((pos1 > mid) || ((pos2 <= end) &&(items[pos2].getRadius() < items[pos1].getRadius()))){
temp[spot] = items[pos2];
pos2 +=1;
}else{
temp[spot] = items[pos1];
pos1 += 1;
}
spot += 1;
}
/* copy values from temp back to items */
for (int i = start; i <= end; i++){
items[i] = temp[i];
}
預先感謝您!
澄清你的意思是「卡住」。你遇到什麼麻煩?你有什麼嘗試?這對我來說很簡單。 –
我堅持的是將while語句轉換爲使用數組列表且沒有錯誤的while語句。我遇到的問題是我不確定如何開始轉換它。 – Spartan
哦,所以你有錯誤?什麼是錯誤?這意味着你已經付出了一些努力,對吧?那麼爲什麼你不顯示你已經嘗試過的while循環。這兩件事都是相當明顯的相關信息。 –