Witam dzisiaj przedstawiam wam merge sort bez rekurencji
musisz wywołać metodę wstepMergeSort
private static int[] copy;
public static void wstepMergeSort(int tab[], int lewy, int prawy) {
copy = new int[prawy+2];
int rozmiar = 2;
int wskaznik = lewy;
while(true) {
int lewy1 = wskaznik;
int prawy2 = wskaznik + (rozmiar-1);
int prawy1 = wskaznik + (rozmiar-1)/2;
int lewy2 = prawy1+1;
if(prawy1 > prawy) {
prawy1 = prawy;
}
if(lewy2 > prawy) {
lewy2 = prawy;
}
if(prawy2 > prawy) {
prawy2 = prawy;
}
startSortujIPowiekszaj(tab, lewy1, prawy1, lewy2, prawy2);
wskaznik = prawy2 + 1;
if(wskaznik>prawy) {
wskaznik = lewy;
if(rozmiar>prawy) {
break;
}
rozmiar *= 2;
}
}
}
public static void startMergeSort(int tab[], int lewy1, int prawy1, int lewy2, int prawy2) {
int wLG = lewy1;
int wPG = lewy2;
int wskaznik = lewy1;
while(true) {
if(wLG > prawy1) {
while(wPG <= prawy2) {
copy[wskaznik] = tab[wPG];
wskaznik++;
wPG++;
}
break;
}
else if(wPG > prawy2) {
while(wLG <= prawy1) {
copy[wskaznik] = tab[wLG];
wskaznik++;
wLG++;
}
break;
}
else if(tab[wLG]<tab[wPG]) {
copy[wskaznik] = tab[wLG];
wLG++;
wskaznik++;
}
else if(tab[wLG]>=tab[wPG]) {
copy[wskaznik] = tab[wPG];
wPG++;
wskaznik++;
}
}
for(int i=lewy1; i<=prawy2; i++) {
tab[i] = copy[i];
}
}