Другие языки программирования и технологии

Можете пожалуйста сказать почему сортирует неверно(C++)

(тут должна использоваться сортировка пузырьком)
Задание: Дан массив A размера N. Не изменяя данный массив, вывести номера его элементов в том порядке, в котором соответствующие им элементы образуют возрастающую последовательность. Использовать метод «пузырьковой» сортировки, модифицировав его следующим образом: создать вспомогательный целочисленный массив номеров I, заполнив его числами от 1 до N; просматривать массив A, сравнивая пары элементов массива A с номерами I1 и I2, I2 и I3, … и меняя местами соответствующие элементы массива I, если левый элемент пары больше правого. Повторив описанную процедуру просмотра N – 1 раз, получим в массиве I требуемую последовательность номеров.

#include<iostream>
int main()
{
srand(time(nullptr));
setlocale(LC_ALL, "RUSSIAN");
const int N = 5;
int A[N], a = 0;
int array[N];
for (int ii = 0; ii < N; ii++)
{
A[ii] = rand() % 5;
std::cout << A[ii];
}
std::cout << "\n";
for (int ii = 0; ii < N; ii++)
{
array[ii] = ii + 1;
std::cout << array[ii];
}
std::cout << "\n";
for (int ii = 0; ii < N - 1; ii++)
{
if (A[ii+1] > A[ii])
{
a = array[ii+1];
array[ii+1] = array[ii];
array[ii] = a;
}
}

for (int ii = 0; ii < N; ii++)
{
std::cout << array[ii];
}
return 0;
}
Я бы так сделала:
 #include  
#include
#include
#include
using namespace std;
int main()
{
int a, b, i, j, N;
cout > a >> b >> N;
int *A = new int [N];
int *B = new int [N];
srand(time(nullptr));
for (i = 0; i < N; ++i)
{
A[i] = rand() % (b - a + 1) + a;
B[i] = i;
}
for (i = 1; i < N; ++i)
for (j = N - 1; j >= i; --j)
if (A[B[j - 1]] > A[B[j]])
swap(B[j - 1], B[j]);
for (i = 0; i < N; ++i)
cout
ЖК
Жаныбек Кыдырмаев
66 572
Лучший ответ
Пузырьковая сортировка работает путем сравнения пар соседних элементов и, если они находятся в неправильном порядке, меняет их местами. В вашем случае, вы сравниваете элементы массива A, но меняете соответствующие элементы массива array, который содержит исходные номера элементов.

Однако, вместо того чтобы сравнивать элементы массива A с номерами I, вы должны использовать номера элементов массива A для сравнения. Это означает, что вам нужно сравнивать A[array[ii+1]-1] с A[array[ii]-1] вместо A[ii+1] с A[ii].
 for (int ii = 0; ii < N - 1; ii++)  
{
if (A[array[ii+1]-1] < A[array[ii]-1])
{
a = array[ii+1];
array[ii+1] = array[ii];
array[ii] = a;
}
}
Костя Гу
Костя Гу
668
#include <iostream>
#include <cstdlib>
#include <ctime>

int main()
{
srand(time(nullptr));
setlocale(LC_ALL, "RUSSIAN");
const int N = 5;
int A[N];
int array[N];

for (int ii = 0; ii < N; ii++)
{
A[ii] = rand() % 5;
std::cout << A[ii];
}
std::cout << "\n";

for (int ii = 0; ii < N; ii++)
{
array[ii] = ii + 1;
std::cout << array[ii];
}
std::cout << "\n";

for (int i = 0; i < N - 1; i++)
{
for (int j = 0; j < N - i - 1; j++)
{
if (A[j] > A[j+1])
{
// Меняем местами элементы массива A
int temp = A[j];
A[j] = A[j+1];
A[j+1] = temp;

// Меняем местами номера элементов массива array
int tempIndex = array[j];
array[j] = array[j+1];
array[j+1] = tempIndex;
}
}
}

for (int ii = 0; ii < N; ii++)
{
std::cout << array[ii];
}

return 0;
}