Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Labs Borland С++.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.77 Mб
Скачать

3. Сортировка элементов массива

Сортировка представляет собой процесс упорядочения элементов в массиве по возрастанию или убыванию их значений. Напримеры: если необходимо отсортиовать целочисленный массив из n элементов, то должно быть выполнено условие a[0]<=a[1]<=…<=a[n].

Существует большое количество алгоритмов сортировки, но все они базируются на трех основных :

  1. сортировка выбором;

  2. сортировка вставкой;

  3. сортировка обменом

    1. Сортировка выбором

Алгоритм сортировки выборм:

1. Найдем в массиве самый минимальный элемент и поменяем его местами с первым элементом.

2. Повторим алгоритм поиска минимального элемента, начиная со второго элемента массива и поменяем его местами со вторым элементом,

3. Описанную выше операцию поиска проводим до полного упорядочения элементов массива.

3.2. Сортировка вставкой

Один из простейших способов отсортировать массив – сортировка вставками. В обычной жизни мы сталкиваемся с этим методом при игре в карты. Чтобы отсортировать имеющиеся в вас карты, вы вынимаете карту, сдвигаете оставшиеся карты, а затем вставляете карту на нужное место. Процесс повторяется до тех пор, пока хоть одна карта находится не на месте.

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

Если длина нашего массива равна n, нам нужно пройтись по n – 1 элементам. Каждый раз нам может понадобиться сдвинуть n – 1 других элементов. Вот почему этот метод требует довольно-таки много времени.

Сортировка вставками относится к числу методов сортировки по месту. Другими словами, ей не требуется вспомогательная память, мы сортируем элементы массива, используя только память, занимаемую самим массивом. Кроме того, она является устойчивой – если среди сортируемых ключей имеются одинаковые, после сортировки они остаются в исходном порядке.

3.3. Сортировка методом прямого выбора

Алгоритм сортировки массива по возрастанию методом прямого выбора может быть представлен так:

1. Просматривая массив от первого элемента, найти минимальный элемент и поместить его на место первого элемента, а первый — на место минимального.

2. Просматривая массив от второго элемента, найти минимальный элемент и поместить его на место второго элемента, а второй — на место минимального.

3. И так далее до предпоследнего элемента.

3.4. Сортировка методом обмена

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

Следует отметить, что максимальное необходимое количество циклов проверки соседних элементов массива равно количеству элементов массива минус один.

Пример: 3.1. Отсортировать целочисленный массив по возрастанию и убыванию методом сортировка выбором.

Формы:

О трывок текста программы:

...

int a[n]; // объявление массива

int min; // номер наименьшего элемента

int j; // номер элемента массива, сравниваемого с наименьшим

int buf; // буфер, используемый для обмена элементами массива

int i,k;

...

for (i=0; i< n; i++)

a[i]=StrToInt(StringGrid1->Cells[i-1,0]); // ввод элементов массива

Label2->Caption="";

for (i=0; i< n; i++)

{ min=i; // определение наименьшего элемента среди a[0] … a[n]

for (j=i; j< n; j++)

if (a[j]<a[min]) min=j;

// поменять местами элементы a[i] и a[min] используя буфер обмена

buf=a[i];

a[i]=a[min]; a[min]=buf;

// отсортированный массив

for (k=0; k< n; k++)

Label2->Caption=Label2->Caption+' '+IntToStr(a[k]);

Label2->Caption=Label2->Caption+"\n"; }

Label2->Caption=Label2->Caption+"\n"+"массив отсортирован" ;}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]