Bubble sort problem

0

Próbuje przepisac bubble sort z wikipedii, ale nie chce działać i zawsze daje result 1. Co robię źle?

https://pl.wikipedia.org/wiki/Sortowanie_b%C4%85belkowe

procedure bubbleSort( A : lista elementów do posortowania )
   n = liczba_elementów(A)
    do
     for (i = 0; i < n-1; i++) do:
       if A[i] > A[i+1] then
         swap(A[i], A[i+1])
       end if
     end for
     n = n-1
   while n > 1
 end procedure

Mój kod

int bubbleSort(int A[], int n) {
    do {
        for(int i=0;i<n-1;i++) {
            if(A[i]>A[i+1]) {
                swap(A[i], A[i+1]);
            }
        }
    n=n-1;
    } while(n>1);
        
}

int main()
{   
 
int A[5] = {5,4,3,2,1};
int n = sizeof(A);
cout << bubbleSort(A, n);

    return 0;
}
1

Sortuj tablicę []
Działa?

Sortuj tablicę [1]
Działa?

Sortuj tablicę [1, 2]
Działa?

Sortuj tablicę [2, 1]
Działa?

Sortuj tablicę [1, 2, 3]
Sortuj tablicę [1, 3, 2]
Sortuj tablicę [3, 1, 2]
Sortuj tablicę [3, 2, 1]
Działa?

Nie działa coś? To debugger i lecisz krok po kroku aż wyłapiesz gdzie jest błąd.
Inaczej to się nie nauczysz co się robi. Kod (poprawny) masz z wiki.

2
cout << bubbleSort(A, n);

Ta funkcja nie powinna nic zwracać, a na pewno nie w taki sposób. int bubbleSort oznacza, że ta funkcja zwraca liczbę. Jedną liczbę. Zawsze.

Zamiast tego wyświetl tablicę.

BTW:

  • prosta optymalizacja - jeśli nie wykonałeś żadnej podmiany w jednym przebiegu pętli to ją zakończ
  • nie masz instrukcji return w funkcji która deklaruje, że coś zwraca. To jest poważny błąd. W tym przypadku zmień typ zwracany na void
0

Zaczeło działac. Czy wygląda to już lepiej?


void bubbleSort(int A[], int n) {
    do {
        for(int i=0;i<n-1;i++) {
            if(A[i]>A[i+1]) {
                swap(A[i], A[i+1]);
            }
         
        }
    n--;
    } while(n>1);
        
}

int main()
{   
 
    int n = 5;
    int A[5] = {5,4,3,2,1};
    for (int i = 0; i < n; i++) {
        cout << A[i] << " ";
    }
    cout << endl;
    bubbleSort(A, n);
    for (int i = 0; i < n; i++) {
        cout << A[i] << " ";
    }


    return 0;
}

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