Proprawienie funkcji aby sortowała malejąco, a nie rosnąco

0

Jak poprawić tę funkcję żeby sortowała malejąco, a nie rosnąco? Zamiana znaków mniejszości i większości na odwrotne nie pomaga. Proszę o pomoc.

void quicksort(int tab[], int left, int right)
{
     int i=left;
     int j=right;
     int x=tab[(left+right)/2];
     do{
         while(tab[i]<x) i++;
         while(tab[j]>x) j--;
         if(i<=j){                  
             int temp=tab[i];
             tab[i]=tab[j];
             tab[j]=temp;
             i++;
             j--;
         }
     }while(i<=j);
     if(left<j) quicksort(tab,left,j);
     if(right>i) quicksort(tab,i,right);     
}
0
         while(tab[i]>x) i++;
         while(tab[j]<x) j--;

Czy nie wydaje ci się że zadanie dają ci po to aby się nauczył?
Czemu robisz to najgorszym możliwym sposobem, którego nawet nie rozumiesz?

0

Jakie zadanie? To program z wikiźródeł do sortowania szybkiego.

W każdym razie, twój sposób nie działa, po zmianie tych dwóch linijek program działa tak:

Przed sortowaniem:

1.=1
2.=1
3.=3
4.=4
5.=5
6.=3
7.=2
8.=3
9.=2

Po sortowaniu:

0.=1634140100
1.=6
2.=5
3.=4
4.=3
5.=3
6.=3
7.=2
8.=2
9.=1

usunięcie cytowania całego poprzedniego posta - fp

0

No to wklejam kod. Zmieniłem tylko to co napisał Dragon.

void quicksort(int tab[], int left, int right)
{
     int i=left;
     int j=right;
     int x=tab[(left+right)/2];
     do{
         while(tab[i]>x) i++;
         while(tab[j]<x) j--;
         if(i<=j){
             int temp=tab[i];
             tab[i]=tab[j];
             tab[j]=temp;
             i++;
             j--;
         }
     }while(i<=j);
     if(left<j) quicksort(tab,left,j);
     if(right>i) quicksort(tab,i,right);
}
0

Niepoprawnie wywołujesz.

0

Tzn?

Dlaczego ten sam kod działa tu: http://ideone.com/kjVSeA
a u mnie nie? Może coś z moim kompilatorem jest nie tak?

0

Bo przypadkowo 11 element (ten który poza tablicą) okazał się być mniejszym.
Poprawne wywołanie: quicksort(a,0,9);

0

Ale dlaczego na dwóch komputerach program działa inaczej?
I skąd się wzięło 1634140100?

0

To śmieć poza tablicą, zawartość komórki a[10]

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