Выбрать главу

Алгоритм сортировки пузырьковым методом получил свое название от способа, используемого для упорядочивания элементов массива. Здесь выполняются повторяющиеся операции сравнения и при необходимости меняются местами смежные элементы. При этом элементы с меньшими значениями постепенно перемещаются к одному концу массива, а элементы с большими значениями — к другому. Этот процесс напоминает поведение пузырьков воздуха в резервуаре с водой. Пузырьковая сортировка выполняется путем нескольких проходов по массиву, во время которых при необходимости осуществляется перестановка элементов, оказавшихся "не на своем месте". Количество проходов, гарантирующих получение отсортированного массива, равно количеству элементов в массиве, уменьшенному на единицу.

В следующей программе реализована сортировка массива (целочисленного типа), содержащего случайные числа. Эта программа заслуживает внимательного разбора.

// Использование метода пузырьковой сортировки

// для упорядочения массива.

#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++ позволяет определять строковые литералы. Вспомним, что строковый литерал — это список символов, заключенный в двойные кавычки. Вот несколько примеров.

"Привет"