2015-10-29 3 views
1

У меня есть ArrayList объектов, которые я пытаюсь сортировать по «сохранению», сохраненному в объекте. Мой код до сих пор написано нижеСлияние Сортировка не работает

public static void mergesort(ArrayList<Object> list){ 
    if(list.size() > 1){ 
     //Split the list in half and create an ArrayList for each side 
     int q = list.size()/2; 
     //System.out.println(list.size() + " " + q); 
     ArrayList<Object> leftList = new ArrayList<Object>(); 
     for(int i = 0; i > q; i++){ 
      leftList.add(list.get(i)); 
     } 
     ArrayList<Object> rightList = new ArrayList<Object>(); 
     for(int j = q; j < list.size(); j++){ 
      rightList.add(list.get(j)); 
     } 
     // System.out.println(" leftList " + leftList.size() + " rightList " + rightList.size()); 
     //sort each half of the list 
     //note: this will happen recursively 
     mergesort(leftList); 
     mergesort(rightList); 
     merge(leftList, rightList, list); 
    } 
} 
public static void merge(ArrayList<Object> leftList, ArrayList<Object> rightList, ArrayList<Object> list){ 
    //'i' stores the index of the main array 
    //'l' stores the index of the left array 
    //'r' stores the index of the right array 
    int i = 0, l = 0, r = 0; 
    //the loop will run until one of the arraylists becomes empty 
    while(leftList.size() != l && rightList.size() !=r){ 
     //if the saving of the current element of leftList is less than the rightList saving 
     if(leftList.get(l).getSaving() < rightList.get(r).getSaving()){ 
      //Copy the current element into the final array 
      list.set(i, leftList.get(l)); 
      i++; 
      l++; 
     } 
     else { 
      list.set(i, rightList.get(r)); 
      i++; 
      r++; 
     } 
    } 

    while(leftList.size() != l){ 
     list.set(i, leftList.get(l)); 
     i++; 
     l++; 
    } 

    while(rightList.size() != r){ 
     list.set(i,rightList.get(r)); 
     i++; 
     r++; 
    } 


} 

По какой-то причине, когда я запускаю его я не получаю никаких ошибок, однако, список остается несортированный. Любые советы будут высоко ценится. Заранее спасибо

ответ

1

Проблема заключается в первом для метода сортировки слиянием:

для (INT I = 0; I> д; я ++) {

Это должно быть:

для (INT I = 0; я < д; я ++) {

Оформить заказ ..

+0

aha спасибо! смотрел на это часами! – Darth123

Смежные вопросы