Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛЕКЦИИ Программирование и основы алгоритмизации...doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.5 Mб
Скачать

Сортировка выбором (SelectSort)

Номер a[0] a[1] a[2] a[3] a[4] действие

прохода

0 5 2 4 7 3 выбрать 2, поменять местами 2 и a[0]

1 2 5 4 7 3 выбрать 3, поменять местами 3 и a[1]

2 2 3 4 7 5 выбрать 4, поменять местами 4 и a[2]

3 2 3 4 7 5 выбрать 5, поменять местами 5 и a[3]

2 3 4 5 7 массив отсортирован

Вычислительная сложность сортировки выбором

В i-м проходе i-й элемент сравнивается с (i+1)-м, ..,.., (n -1)-м. Количество сравнений при этом: Общее число сравнений:

Сортировка требует фиксированного числа сравнений, зависящего только от размера массива. Число обменов – всегда 1 на проход, т.е. n обменов. Наилучшего и наихудшего случаев не существует, т.к. требует фиксированного числа как сравнений, так и обменов.

Алгоритм функции сортировки выбором

Пузырьковая сортировка (BubbleSort)

В отличие от обменной сортировки, здесь сравниваются только соседние элементы. В начале каждого прохода last=0; по окончании прохода в last остается индекс первого элемента из участвующих в последнем обмене элементов. Поэтому в очередном проходе сравниваются соседние элементы в неотсортированной головной части массива от a[0] до a[last]. Процесс сортировки прекращается, когда last остается равным 0. Алгоритм совершает максимум n-1 проход.

a[0] a[1] a[2] a[3] a[4] действие

проход 0 5 2 4 7 3 поменять местами 5 и 2, last=0

last=0 2 5 4 7 3 поменять местами 5 и 4, last=1 2 4 5 7 3 5 и 7 упорядочены, last=1

2 4 5 7 3 поменять местами 7 и 3, last=3

2 4 5 3 7

Так как last не равно нулю, процесс повторяется. В проходе 1 сканируется головная часть массива от a[0] до a[3].

проход 1 2 4 5 3 7 last=0

last=0 2 4 5 3 7 last=0

2 4 5 3 7 поменять местами 5 и 3, last=2

2 4 3 5 7

проход 2 2 4 3 5 7 last=0

last=0 2 4 3 5 7 поменять местами 4 и 3, last=1

2 3 4 5 7

проход 3 2 3 4 5 7 last=0

last=0 2 3 4 5 7 массив отсортирован

В проходе 3 останется last=0, что означает завершение процесса сортировки.

Вычислительная сложность пузырьковой сортировки

Благодаря сохранению индекса последнего обмена исключается избыточный просмотр. Если массив отсортирован, то нужен 1 проход с сравнениями. Худший случай – при пересортировке, когда требуется проход, сравнений и обменов.

//---------------------------------------------------------------------

void BubbleSort(int* const a, const int n)

{

void Swap(int*, int*); //прототип нужен для контроля вызова

int i, j, last;

i=n-1;

while(i>0)

{

last=0;

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

if(a[j+1]<a[j])

{ Swap(&a[j], &a[j+1]); last=j; }

i=last;

}

}

//------------------------------------------------------------------

void Swap(int* p1, int* p2)

{ int z=*p1; *p1=*p2; *p2=z; }

//------------------------------------------------------------------

void PrintMass(const int* const a, const int n)

{

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

cout<<setw(4)<<a[i];

cout<<endl;

}

//-------------------------------------------------------------------

Алгоритм функции пузырьковой сортировки