Алгоритм сортировки пузырьковым методом получил свое название от способа, используемого для упорядочивания элементов массива. Здесь выполняются повторяющиеся операции сравнения и при необходимости меняются местами смежные элементы. При этом элементы с меньшими значениями постепенно перемещаются к одному концу массива, а элементы с большими значениями — к другому. Этот процесс напоминает поведение пузырьков воздуха в резервуаре с водой. Пузырьковая сортировка выполняется путем нескольких проходов по массиву, во время которых при необходимости осуществляется перестановка элементов, оказавшихся "не на своем месте". Количество проходов, гарантирующих получение отсортированного массива, равно количеству элементов в массиве, уменьшенному на единицу.
В следующей программе реализована сортировка массива (целочисленного типа), содержащего случайные числа. Эта программа заслуживает внимательного разбора.
// Использование метода пузырьковой сортировки
// для упорядочения массива.
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int nums[10];
int a, b, t;
int size;
size = 10; // Количество элементов, подлежащих сортировке.
// Помещаем в массив случайные числа.
for(t=0; t<size; t++) nums[t] = rand();
// Отображаем исходный массив.
cout << "Исходный массив: ";
for(t=0; t<size; t++) cout << nums[t] << ' ';
cout << '\n';
// Реализация метода пузырьковой сортировки.
for(a=1; a<size; а++)
for(b=size-1; b>=a; b--) {
if(nums[b-1] > nums[b]) { // Элементы неупорядочены.
// Меняем элементы местами.
t = nums[b-1];
nums[b-1] = nums[b];
nums[b] = t;
}
}
}
// Конец пузырьковой сортировки.
// Отображаем отсортированный массив.
cout << "Отсортированный массив: ";
for(t=0; t<size; t++)
cout << nums[t] << ' ';
return 0;
}
Хотя алгоритм пузырьковой сортировки пригоден для небольших массивов, для массивов большого размера он становится неэффективным. Более универсальным считается алгоритм Quicksort. В стандартную библиотеку C++ включена функция qsort(), которая реализует одну из версий этого алгоритма. Но, прежде чем использовать ее, вам необходимо изучить больше средств C++. (Подробно функция qsort() рассмотрена в главе 20.)
Чаще всего одномерные массивы используются для создания символьных строк. В C++ строка определяется как символьный массив, который завершается нулевым символом ('\0'). При определении длины символьного массива необходимо учитывать признак ее завершения и задавать его длину на единицу больше длины самой большой строки из тех, которые предполагается хранить в этом массиве.
Строка — это символьный массив, который завершается нулевым символом.
Например, объявляя массив str, предназначенный для хранения 10-символьной строки, следует использовать следующую инструкцию.
char str [11];
Заданный здесь размер (11) позволяет зарезервировать место для нулевого символа в конце строки.
Как упоминалось выше в этой книге, C++ позволяет определять строковые литералы. Вспомним, что строковый литерал — это список символов, заключенный в двойные кавычки. Вот несколько примеров.
"Привет"