Sortowanie JAVA - jak sprawić aby sortowało na różne sposoby.

0

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!

0

Moment... z tego, co piszesz, to chcesz, żeby wynik był posortowany dla danych wejściowych: losowych, częściowo posortowanych, itd. Czy algorytm jest taki sam, tylko wrzucasz różne dane i (zapewne) mierzysz czas wykonywania operacji.
Jak niby miałbyś sortować "losowo"?

Jeśli jednak chodzi o to, jak sortować według własnych kryteriów, to zainteresuj się komparatorami (java.util.Comparator).

1 użytkowników online, w tym zalogowanych: 0, gości: 1