Cześć,
zamieszczę temat tutaj ponieważ kod mam całkiem sprawny, jednak nie mogę dojść do ładu jak sprawić żeby sortowało mi elementy tablicy dla danych:
- losowych,
- częściowo posortowanych,
- posortowanych w kolejności rosnącej,
- posortowanych w kolejności malejącej.
package merges;
public class Merges {
public static int[] getRandomArray(int elements) { //przypisanie tablicy wartosci calkowitych
int[] tl = new int[elements]; //tworzenie pustej tablicy
for (int k = 0; k < elements; k++) { //wypełnienie tablicy daje wartosci z przedzialu 0 do 1 dlatego nalezy wymnozyc przez 100 lub wielokrotnosc
tl[k] = (int) (Math.random() * 10000);
}
return tl;
}
public static void main(String a[]) {
int i;
int n = 500; //ilosc elementow
int tab1[] = new int[50];
int j = tab1.length;
for (i = 0; i < tab1.length; i++) {
tab1[i] = j--;
}
System.out.println(" Sortowanie przez scalanie\n");
System.out.println("Wartości przed sortowaniem:\n");
for (i = 0; i < tab1.length; i++) {
System.out.print(tab1[i] + " ");
}
System.out.println();
long start = System.currentTimeMillis();
mergeSort_srt(tab1, 0, tab1.length - 1);
long stop = System.currentTimeMillis();
System.out.print("Wartości po sortowaniu:\n");
for (i = 0; i < tab1.length; i++) {
System.out.print(tab1[i] + " ");
}
System.out.println();
System.out.println("czas wykonania w milisekundach:" + (stop - start));
}
public static void mergeSort_srt(int tab1[], int lo, int n) {
int low = lo;
int high = n;
if (low >= high) {
return;
}
int middle = (low + high) / 2;
mergeSort_srt(tab1, low, middle);
mergeSort_srt(tab1, middle + 1, high);
int end_low = middle;
int start_high = middle + 1;
while ((lo <= end_low) && (start_high <= high)) {
if (tab1[low] < tab1[start_high]) {
low++;
} else {
int Temp = tab1[start_high];
for (int k = start_high - 1; k >= low; k--) {
tab1[k + 1] = tab1[k];
}
tab1[low] = Temp;
low++;
end_low++;
start_high++;
}
}
}
}
Przy obecnych ustawieniach sortuje mi z tablicy o 1000 elementach i układa je od najmniejszego do największego. Czyli praktycznie 3ci punkt mam spełniony. Pytanie jak sprawić żeby działały pozostałe punkty. Myślałem nad tym, że trzeba byłoby dodać tą linijkę z j, bo inaczej tab[i] = i czyli leci wg kolejności, a jak mam j-- to leci od góry w dół, ale jakoś nie wychodzi ;D
Dzięki za pomoc!