Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

С++. Для чего нужен тут вложенный цикл??

Матвей Соколов Ученик (146), открыт 2 недели назад
Для чего нужен тут вложенный цикл??
#include <iostream>
#include <cstdlib>
using namespace std;

int main() {
system("chcp 1251>nul");

const int n = 10;
srand(2);
int nums[n];
int j, k, s, i;
cout << "Массив до сортировки:\n | ";
for (k = 0; k < n; k++) {
nums[k] = rand() % 10;
cout << nums[k] << " | ";
}
cout << "Массив после сортировки:\n | " ;
for (i = 1; i <= n-1 ; i++) {
for (j = 0; j < n - i; j++) {
if (nums[j] > nums[j + 1]) {
s = nums[j + 1];
nums[j + 1] = nums[j];
nums[j] = s;
}
}
}
for (k = 0; k < n; k++) {
cout << nums[k] << " | ";
}
cout << endl;
system("pause>nul");
return 0;
}
2 ответа
Оракул Оракул (63138) 2 недели назад
Потому что сортировку за один проход не сделать
Матвей СоколовУченик (146) 2 недели назад
я не понимаю что проходит во внешнем цикле а что во внутреннем
Оракул Оракул (63138) Матвей Соколов, посмотрите визуализацию, чтобы понять https://www.youtube.com/watch?v=MfW-5Fp_0ss
ПапаВысший разум (149125) 2 недели назад
За один, может, и нет, а за 2 - в его задаче точно можно. Первый проход - прочитать, второй - записать.
Андрей Высший разум (474952) 2 недели назад
Потому, что в пузырьковой сортировке (твой код) каждый проход по массиву гарантировано помещает на своё место единственный элемент. И чтобы отсортировать массив длины n, требуется максимум n - 1 проход по массиву.

Внутренний цикл как раз и реализует проход по массиву, устанавливающий на своё место один элемент (максимальный в ещё не отсортированной части массива). А внешний цикл обеспечивает нужное кол-во проходов.

P.S. Просто возьми вместо случайных элементов массив {10, 9, 8, 7, 6, 5, 4, 3, 2, 1} и посмотри, как он будет меняться на каждом проходе.
Похожие вопросы