Правильно ли я конвертировал псевдокод в 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 меняется на противоположенное.