Witam stworzyłem swój kod marge sorta i nie mogę dość dlaczego dubluje mi wartości. Prześledziłem go kilka razy i nie widzę błędu
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class MergeSort <T> implements Sorted<T>{
private List<T> toSort;
private Comparator<T> comp; // komparator naturalny zwraca -1 gdy a<b zwraca 0 gdy a==b zwraca 1 gdy a>b
private CollectingData col; // do zbierania danych chwilowo nie używany
private ArrayList<T> sorted=new ArrayList<T>();
public MergeSort(String sortType, List<T> toSort,Comparator<T> comp){
this.toSort=toSort;
this.comp=comp;
col=new CollectingData("MergeSort", sortType);
doMergeSort(0,toSort.size()-1);
}
private void doMergeSort(int first,int last){
int center;
if(first<last){
center=((first+last)/2);
doMergeSort(first,center);
doMergeSort(center+1,last);
merge(first,center,last);
}
}
private void merge(int first, int center, int last){
int i=first;
int j=center+1;
int start=first;
while(i<=center && j<=last){
if(comp.compare(toSort.get(i), toSort.get(j))<0){
sorted.add(start++,toSort.get(i++));
}
else{
sorted.add(start++,toSort.get(j++));
}
}
while (i<=center){
sorted.add(start++,toSort.get(i++));
}
}
@Override
public List<T> getSorted() {
// TODO Auto-generated method stub
return sorted;
}
}
metoda do sprawdzania
public class UnitTest {
public static void main(String args[]){
MergeSort<Integer> sort;
ArrayList<Integer> tosort=new ArrayList<>();
Comparator<Integer> comp=new MyComparator<Integer>();
int tab[]={8,7,6,5};
for (Integer i:tab){
tosort.add(i);
}
sort=new MergeSort<Integer>("Best",tosort,comp);
tosort=(ArrayList<Integer>)sort.getSorted(); // tak wiem nadpisuję listę ale to nie wpływa na wynik
for(Integer i:tosort){
System.out.println(i);
}
}
}
Bardzo dziękuję za pomoc :)