Problem z quicksort

0

Mam pewien problem. Funkcja quicksort malejąco działa bez zarzutu. Natomiast gdy chce ją zmienić by sortowałą rosnąco plik .exe napotyka błąd, natomiast przy kompilacji wszystko przebiega w porzadku.

 void sortowanie(int A[], int n, int m){
	    int i = n, j = m + 1;
	    int temp, pivot = A[n];
	    do {
	        do
	            i++;
	        while (A[i] > pivot);
	        do
	            j--;
	        while (A[j] < pivot);
	        if (i < j) {
	            temp = A[i];
	            A[i] = A[j];
	            A[j] = temp;
	        }
	    } while (j > i);
	    
	    A[n] = A[i];
	    A[i] = pivot;
 
        if (j - 1 > n) sortowanie(A, n, j - 1);
	    if (m > j + 1) sortowanie(A, j + 1, m);
 
	}
0

W trakcie działania programu odwołujesz się do elementu A[m], który może być poza tablicą.

0

n to zapewne początek zakresu, a m koniec, więc A[m] czy A[m] powinno oznaczać komórkę pamięci należącą do tablicy. Ja błędu upatrywałbym w braku sprawdzenie czy indeksy i lub j nie wychodzą poza zakres.

Masz szczęście, poratuję cię gotowym przykładem: http://ideone.com/4WTas

0

Wybaczcie, że nie wniosę nic do samego problemu, ale przy tego typu wątkach (że program wywala się w jakimś miejscu) zawsze się zastanawiam się, czemu autor, zamiast tworzyć wątek na forum, nie puści programu pod debugerem i samemu nie znajdzie błędu w kilka minut. Autor zna swój kod najlepiej, jeśli problem jest reprodukowalny z jakimś zestawem danych (tak jak tu), to po co tracić czas na wrzucanie tego obcym ludziom na forum do sprawdzenia, skoro można to łatwo i szybko znaleźć samemu.

0

To sortowanie, nie może działać poprawnie.

                do
                    i++;
                while (A[i] > pivot);

W tym fragmencie, pominiesz pierwszy element tablicy nie zależnie od tego czy jest mniejszy od mediany czy większy czy taki sam.
Oznacza to że ten algorytm nigdy nie posortuje tablicy:
3 2 1
Oprócz tego to co powiedział wibowit, ten sam fragment, zastanów się jak zadziała dla danych:
3 2 2 2 2 2 2

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