Правильно ли я конвертировал псевдокод в c++

procedure bubbleSort(A : list of sortable items)
    n := length(A)
    repeat
    newn := 0
    for i := 1 to n - 1 inclusive do
    if A[i - 1] > A[i] then
    swap(A[i - 1], A[i])
    newn := i
    end if
    end for
    n := newn
    until n ≤ 1
end procedure
int temp;
int flag = 0;
int n;
do {
    for (int i = 1; i < N - 1; i++) {
        do {
            if (array[i] > array[i - 1]) {
                temp = array[i];
                array[i] = array[i - 1];
                array[i - 1] = temp;
                flag = i;
            }
        }
    }
    n = flag;
} while (n <= 1);

Ответы (1 шт):

Автор решения: avp

Как говорила одна моя подруга -- проще ... , чем объяснить, почему ... (наверняка это уже есть в инете)

#include <stdlib.h>
#include <iostream>
using namespace std;

#define N 10

#if 0
procedure bubbleSort(A : list of sortable items)
    n := length(A)
    repeat
    newn := 0
    for i := 1 to n - 1 inclusive do
    if A[i - 1] > A[i] then
    swap(A[i - 1], A[i])
    newn := i
    end if
    end for
    n := newn
    until n ≤ 1
end procedure
#endif
  
template<typename T> void bubbleSort (T A[])
{
  size_t n = N;                        // n := length(A)
  do {                                 // repeat
    size_t newn = 0;
    for (size_t i = 1; i < n; i++) {   // for i := 1 to n - 1 inclusive do
      if (A[i - 1] > A[i]) {
        // swap
        T t = A[i];
        A[i] = A[i - 1];
        A[i - 1] = t;
      } // end if
      newn = i;
    } // end for
    n = newn;
  } while (n > 1);                    //  until n ≤ 1 
}

int main () {
  int a[N];
  for (int i = 0; i < N; i++) {
    a[i] = random() % N;
    cout << a[i] << ' ';
  }
  cout << '\n';
  
  bubbleSort (a);

  for (int i = 0; i < N; i++)
        cout << a[i] << ' ';
  cout << '\n';
}

Обратите внимание, что при трансляции repeate ... until(expr) в do { ... } while (expr); значение expr меняется на противоположенное.

→ Ссылка