Как вывести отсортированный массив c
Познакомившись с циклами, переменными, условными конструкциями и массивами, рассмотрим несколько задач для работы с массивами.
Количество положительных чисел
Найдем количество положительных чисел в массиве:
Здесь создаем вспомогательную переменную result , которая будет содержать количество положительных чисел. В цикле прохожим по массиву и, если его элемент больше нуля, добавляем к переменной result единицу.
Инверсия массива
Вторая задача — инверсия массива, то есть переворот его в обратном порядке:
Поскольку нам надо изменять элементы массива, то для этого используется цикл for. Алгоритм решения задачи подразумевает перебор элементов до середины массива, которая в программе представлена переменной k, и обмен значений элемента, который имеет индекс i, и элемента с индексом n-i-1.
Программа сортировки массива
Теперь возьмем задачу посложнее — простейшую сортировку массива:
Для сортировки массива выполняем проходы по массиву и сравниваем элементы. Поскольку нам надо последовательно сравнивать каждый элемент массива с каждым (за исключением сравния с самим собой), то здесь применятся вложенный цикл.
Во внешнем цикле мы берем элемент, который будем сравнивать:
Далее запускаем вложенный цикл, который начинается, со следующего элемента, и из которого извлекаем элементы, с которыми будем сравнивать тот элемент, которые берется из массива во внешнем цикле:
Если элемент с меньшим индексом больше элемента с большим индексом, то меняем элементы местами.
Сортировка и вывод массива
Дана вещественная матрица размером MxN. Упорядочить ее строки по неубыванию суммы их элементов.
Вот мой алгоритм
- создаем массив и рандомно его заполняем,
- создаем массив еще один, в котором i-ый элемент равен сумме i-ой строки,
- сортируем второй массив по возрастанию,
- выводим строки первого массива в том порядке, в котором отсортированы элементы второго массива.
Вот как я делаю два первых пункта, а остальное — пока не знаю и у меня второй пункт нормально не выполняется.
Сортировка массива C#. Алгоритм «Сортировка выбором»
На данный момент у нас уже хватает знаний, чтобы попробовать написать простейшую программу в C#. Но, простейшая — не значит бесполезная. Наша программа будет сортировать массив C#. При написании различных программ нам часто приходится сталкиваться с таким понятием как сортировка. Например, необходимо отсортировать список людей по алфавиту или произвести сортировку оценок учащихся по возрастанию. И для того, чтобы максимально эффективно решить такую задачу мы должны знать не только сам язык программирования, но и алгоритмы сортировки — их сложность, как они реализуются на практике и так далее. Сегодня мы рассмотрим самый простой алгоритм сортировки массива C# — сортировку выбором.
Задача
Пользователь вводит с клавиатуры целые числа, разделенные запятой. Программа должна собрать из этих чисел массив и отсортировать его по возрастанию.
В консоль программа выведет неотсортированный и отсортированный массивы.
Алгоритм «Сортировка выбором»
Этот алгоритм является одним из самых простейших алгоритмов сортировки массива. Его смысл заключается в том, чтобы, чтобы идти по массиву, например слева направо, каждый раз искать минимальный элемент массива и обменивать его с первым элементом неотсортированной части массива. Шаги алгоритма можно представить следующим образом:
- Находим минимальный элемент в массиве.
- Меняем местами минимальный и первый элемент местами.
- Ищем минимальный элемент в неотсортированной части массива, т.е., начиная уже со второго элемента массива.
- Меняем местами второй элемент массива и найденный минимальный.
- Ищем минимальный элемент в массиве, начиная с третьего, меняем местами третий и минимальный элементы.
- Продолжаем алгоритм до тех пор пока не дойдем то конца массива.
Реализация алгоритма сортировки выбором в C#
Вначале приведу реализацию алгоритма сортировки массивы выбором в C#. Код постарался максимально пояснить с помощью комментариев:
Проверить работу алгоритма нам поможет небольшая консольная программка в C#, которую мы сейчас и напишем.
Программа сортировки массива C# выбором
По условию задачи пользователь может ввести любое количество целых чисел, разделенных запятыми. Нам необходимо прочитать эти числа, составить из полученных чисел массив, вывести его в консоль, отсортировать массив приведенным выше алгоритмом и вернуть в консоль отсортированный массив. Все эти шаги реализуются достаточно просто.
Собираем массив целых чисел
В первой строке мы предлагаем пользователю ввести целые числа. После того, как пользователь введет любое количество чисел и нажмет Enter, программа переходит к следующему шагу — разделит полученную от пользователя строку на массив строк:
Метод Console.ReadLine() возвращает нам последнюю строку из консоли.
Метод Split(new char[] < ',' >) — это метод для типа string , который возвращает массив строк, созданный из исходной строки. В качестве аргумента этот метод принимает массив символов по которым будет делиться строка. Так как у нас, по условиям задачи, разделитель всего один — запятая, то и массив разделителей в методе Split() содержит всего один элемент.
На следующем шаге мы создаем массив целых чисел размер которого совпадает с размером массива nums .
Далее, в цикле for мы наполняем наш созданный массив числами, используя метод Parse() у типа данных int , который возвращает нам целое число из строки.
Выводим неотсортированный массив в консоль
Вывести неотсортированный массив пользователю проще простого, если воспользоваться циклом foreach :
Сортируем массив, используя алгоритм «Сортировка выбором» и показываем результат
Для этого используем реализацию алгоритма, которая представленная выше. Чтобы вывести отсортированный массив пользователю снова используем цикл foreach .
так как для неосортированного массива мы использовали метод Console.Write() , которые не производит переход на следующую строку, то здесь, в методе Console.WriteLine() мы использовали управляющие символы C# /r/n для перехода на новую строку и возврат каретки в начало строки.
Результат работы программы
В результате работы программы можно получить, например, вот такой вывод в консоли:
Неотсортированный массив: 0 100 999 345 -100 1 0 9 7 6 5 4 3 2 1 67 88
Отсортированный массив: -100 0 0 1 1 2 3 4 5 6 7 9 67 88 100 345 999
Как видите, алгоритм успешно справляется с сортировкой массива и все заданные числа были отсортированы от меньшего к большему.
Исходный код программы
Ниже приведен весь исходный код программы C# для сортировки массива:
Также, Вы можете загрузить исходный код приложения из нашего репозитория на Github.
Итого
Сегодня мы написали своё первое полноценное приложение на C# для сортировки массива. Как видите, для этого нам пригодилось всё, что мы изучали ранее — переменные , работа с массивами, литералы, циклы и так далее. Постепенно, наши программы будут «обрастать» новыми возможностями, станут более устойчивыми к различным ситуациям (например, сегодня я даже не пытался проверить то, что ввел пользователь, хотя такую проверку необходимо проводить). Но всё это будет делаться постепенно, по мере изучения возможностей C#.
Алгоритм пузырьковой сортировки одномерного массива на C++
Здравствуй, дорогой гость. В этой статье я расскажу об алгоритме сортировки массива методом пузырька.
Элементы массива, как пузырьки
Алгоритм пузырьковой сортировки — это довольно простой в реализации алгоритм для сортировки массивов. Можно встретить и другие названия: пузырьковая сортировка, Buble sort или сортировка простыми обменами — но все они будут обозночать один и тот же алгоритм. Назван так, потому что большее или меньшее значение «всплывает» (сдвигается) к краю массива после каждой итерации, это будет видно в примере.
Сложность этого алгоритма выражается формулой О(n^2) (n в степени 2). Алгоритм работает медленно с большими массивами, а поэтому малоэффективен и на практике используется редко, чаще всего в учебных целях. Для сортировки массивов на практике используют другие более быстрые алгоритмы, один из них — QuickSort(быстрая сортировка). Функция для быстрой сортировки включена во многие стандартные библиотеки языков программирования, например в языке C функция qsort() из стандартной библиотеки.
Алгоритм работает очень просто. Программа проходит по всем элементами массива по порядку. Каждый текущий элемент сравнивается с соседним и, если он меньше/больше(если сортируем по убыванию/возрастанию соответственно) меняется местами с соседним.
Пример работы алгоритма пузырьковой сортировки
Рассмотрим пример работы алгоритма с массивом, состоящим из четырех элементов.
Имеется массив [4, 5, 2, 6]. Сортировать его будем по убыванию.
N — количество элементов в массиве. i — номер прохода. Алгоритм будет делать проходы по массиву, всего N-1 проходов до N-i ячейки в каждой итерации для любого массива.
Первый проход циклом от первого до N-1 элемента, сравнение условием и перемена местами в случае удовлетворения условия — если левый элемент меньше правого.
4 5 2 6
Сравниваем 4 и 5, 4 меньше 5, а значит мы их меняем местами.
5 4 2 6
Сравниваем 4 и 2, 4 не меньше 2, а значит пропускаем и идем дальше.
5 4 2 6
Сравниваем 2 и 6, 4 меньше 6, а значит мы их меняем местами.
Теперь мы у нас массив [5, 4 ,6, 2]. Как видно, он еще не упорядочен до конца. После первого прохода в конец массива передвинулось самое маленькое значение, теперь нам нужно сделать еще проход до элемента N-2 (ведь идет 2-ая итерация).
Делаем проход, начиная с первого элемента.
5 4 6 2
Сравниваем 5 и 4, 5 не меньше 4, а значит пропускаем и идем дальше.
5 4 6 2
Сравниваем 6 и 4, 6 меньше 4, а значит мы их меняем местами. Мы достигли элемента N-2, завершаем итерацию.
Теперь мы имеем массив [5, 6, 4, 2]. 2 последних элемента упорядочены как нужно. Для завершения нужно выполнить еще один проход до N-3.
5 6 4 2
Сравниваем 5 и 6, 5 меньше 6, а значит мы их меняем местами. Мы достигли элемента N-3, завершаем итерацию.
В итоге на выходе мы получили массив упорядоченный по убыванию — [6, 5, 4, 2].
Реализация алгоритма на языке C++
Программа выполнит последовательно следующие действия:
- Установит размер массива, прося пользователя ввести числовое значение.
- Заполнит массив значениями, введенными пользователем для каждого элемента массива.
- Выведет исходный массив.
- Отсортирует массив по убыванию.
- Выведет отсортированный массив.
Теперь собственно код по каждому из пунктов.
1. Объявим переменную и инициализируем её значение данными, введенными пользователем.
2. Объявим массив из количества элементов, которое ввел пользователь. А то есть объявим массив из n элементов. После запустим цикл и попросим пользователя ввести значение каждого элемента.
3. Выведем значения всех элементов массива, используя цикл.
4. Отсортируем массив по убыванию. Здесь нам понадобятся 2 цикла. Первый будет выполнять количество итераций n-1, как в примере выше, который мы разобрали. Второй цикл будет осуществлять проходы по элементам массива (таких проходов n-i) и сравнивать соседние элементы. Элементы сравниваются условием, если i-ый элемент меньше правого соседа, то они меняются местами, таким образом самый маленький элемент будет в правой крайней части.
5. Выведем отсортированный массив, используя цикл, как в 3-ем действии.
Весь код программы
Обратите внимание, что в коде программы использовались русские символы, если у вас их отображение некорректно, то почитайте статью про решение проблемы с отображением русских символов в консоли.
Написание программы завершено, теперь проверим результаты. А для этого введем в программу массив, сортировку которого мы произвели, рассматривая пример работы алгоритма немного выше в этой статье.
После ввода данных и выполнения программы мы получили результат.

Результат сортировки массива методом пузырька
Как видно на картинке, массив отсортирован по убыванию. Программа работает.
Как я отмечал ранее, алгоритм работает очень медленно с большим объемом данных, а потому непригоден для использования на практике, а пригоден лишь в обучающих и ознакомительных целях. Посмотрите на решения других задач по программированию.
Для вас это может быть интересно:
Алгоритм пузырьковой сортировки одномерного массива на C++ : 21 комментарий
Везде о ней пишут, но по быстродействию она уступает любым другим. Напишите о QuickSort, будет полезно
- Nicknixer Автор записи 15.09.2016
Да, действительно, по быстродействию она уступает многим другим. QuickSort в планах есть, в скором будущем.
А как отсортировать массив по возрастанию?
if(mass[r] < mass[r+1])
поменять здесь знак сравнения на противоположный
/*
* Ввести целочисленный массив из N целых чисел.
* Отсортировать этот массив по возрастанию методом пузырька
*/
#include
using namespace std;
int main()
<
int *arr; // указатель для выделения памяти под массив
int size; // размер массива
// Ввод количества элементов массива
cout <> size;
if (size <= 0) <
// Размер масива должен быть положитлеьным
cerr << "Invalid size" << endl;
return 1;
>
arr = new int[size]; // выделение памяти под массив
// заполнение массива
for (int i = 0; i < size; i++) <
cout << "arr[" << i <> arr[i];
>
int temp; // временная переменная для обмена элементов местами
// Сортировка массива пузырьком
for (int i = 0; i < size — 1; i++) <
for (int j = 0; j arr[j + 1]) <
// меняем элементы местами
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
>
>
>
// Вывод отсортированного массива на экран
for (int i = 0; i < size; i++) <
cout << arr[i] << " ";
>
cout << endl;
delete [] arr; // освобождение памяти;
ЭЭЭЭ
а разве можно объявлять int mas[n] .
где n — это int n ??
в C++ статический массив объявляется только константой.
или так: int mas [10] например
или так:
const int n= 5;
int mas[n];
как у Вас это скомпилилось.
- Николай Сергейчук Автор записи 09.02.2017
Можно, главное чтобы n было присвоено значение.
У меня ваша программа не пошла. Пишет ошибки. Делала через Visual Studio
Работает только если в строку int mass вставить конкретное количество элементов
Согласна с Андреем.
Помогите, проверьте правильность строки int mass[n]
То есть в строке int mass[n] присвоить просто любое значение?
Тогда все идет. А почему, не пойму
- Николай Сергейчук Автор записи 27.03.2017
Должно быть присвоено значение для переменной n до объявления массива.
Например:
int n =5;
int mass[n];
пишет что нужна константа в int mass[n];
почему бы во втором цикле не присваивать переменной i2 переменную цикла i, ведь это с каждой итерацией уменьшает количество итераций второго цикла?
for (int i = 0; i < 6; i++) <
for (int i2 = i; i2 m1[i2 + 1])
<
a = m1[i2]; m1[i2] = m1[i2 + 1]; m1[i2 + 1]=a;
>
>
Ошибка в коде, ибо массив нужен динамический.
int n; // Кол-во элементов
cout <> n;
int *mass = new int[n];
Дальше уже можно писать, как на сайте, только в конце добавить delete [] mass;
Грубая ошибка в коде программы, компилятор не создаст массив с переменным размером, здесь нужна куча/динамическая память.
Здравствуйте! Пожалуйста сделайте программу которая сортирует одномерный массив пузырьком по столбцу.В инете никто не сделал это , похоже мало кто знает как вообще сделать.Я надеюсь на вас пожалуйста помогите мне с этим.
Просто в массив нельзя вставить «магическое число». Нужна константа. Либо как сказали выше — динамический массив.
код нифига не работает на с++
Добавить комментарий Отменить ответ
Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.