Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
si.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
148.48 Кб
Скачать

Задача сортировки данных. Определения:

  • Сортировкой называется упорядочение множества однотипных объектов по тому или иному признаку

  • Признак, по которому осуществляется упорядочение объектов, называется ключом сортировки

Примеры:

  • При составлении списка студентов их фамилии располагаются в алфавитном порядке

  • Мастерская по ремонту бытовой техники выполняет заявки на обслуживание в порядке их поступления – заявки упорядочиваются по времени

  • Порядок доставки товара торговым предприятием может определяться объемом торговой сделки – заказы будут сортироваться по стоимости

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

Простые алгоритмы сортировки.

Определение:

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

Сравнение методов

Все три алгоритма имеют, в среднем, одинаковую эффективность и выбор одного из них может определяться особенностями задачи, а также личными пристрастиями программиста.

Алгоритм сортировки включениями.

Как и в предыдущем методе, отсортированная часть массива формируется путем последовательного добавления в нее элементов из его неотсортированной части.

Однако теперь в качестве очередного берется первый элемент неотсортированной части.

Место его размещения в отсортированной части выбирается так, чтобы сохранить уже имеющийся там порядок сортировки.

const int N = 10;

void main()

{ int i, j, nMin, A[N], c;

// здесь нужно ввести массив A

for ( i = 1; i < N; i ++ )

{ c = A[i];

j = i -1; // ищем минимальный, начиная с A[i]

while (j > =0 && A[j] > c) A[j+1] = A[j--];

A[j+1] = c;

}

printf("\n Отсортированный массив:\n");

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

printf("%d ", A[i]);

}

Алгоритм сортировки обменом.

Этот метод сортировки имеет жаргонное наименование «метод пузырька» и заключается в многократном упорядочении пар соседних элементов.

const int N = 10;

void main()

{

int i, j, A[N], c;

// здесь надо ввести массив A

for ( i = 0; i < N-1; i ++ ) // цикл повторных проходов по массиву

for ( j = N-2; j >= i; j -- ) // идем с конца массива в начало

if ( A[j] > A[j+1] ) // если они стоят неправильно, ...

{

c = A[j]; A[j] = A[j+1]; A[j+1] = c; // переставить A[j] и A[j+1]

}

printf("\n Отсортированный массив:\n");

for ( i = 0; i < N; i ++ ) printf("%d ", A[i]);

}

10.Задача сортировки данных. Сортировка одномерных массивов методом Шелла.

Задача сортировки данных.

Определения:

  • Сортировкой называется упорядочение множества однотипных объектов по тому или иному признаку

  • Признак, по которому осуществляется упорядочение объектов, называется ключом сортировки

Примеры:

  • При составлении списка студентов их фамилии располагаются в алфавитном порядке

  • Мастерская по ремонту бытовой техники выполняет заявки на обслуживание в порядке их поступления – заявки упорядочиваются по времени

  • Порядок доставки товара торговым предприятием может определяться объемом торговой сделки – заказы будут сортироваться по стоимости

Сортировка методом Шелла.

Этот метод сортировки был предложен в 1959 г. Дональдом Шеллом

Метод Шелла является усовершенствованием простого метода включения.

Идея метода

  • На каждом этапе процесса сортировки массив разбивается на цепочки равноотстоящих элементов

  • Расстояние между элементами в цепочке называется ее шагом (шагом сортировки)

  • Каждая из таких цепочек сортируется методов вставок

  • При значении шага, равном k, этот процесс называется k-сортировкой массива

Теорема

  • Имеет место важная теорема, которая служит обоснованием метода Шелла:

- если массив, отсортированный с шагом k, затем сортируется с шагом m<k, то он остается k-отсортированным

  • Иначе говоря, каждая последующая сортировка сохраняет результат предыдущей и увеличивает степень упорядоченности массива

Последовательность шагов

    • Анализ метода Шелла показывает, что желательно минимизировать количество кратных значений в последовательности шагов сортировки

    • В литературе встречаются рекомендации использовать такие последовательности шагов (записанные в обратном порядке):

…121, 40, 13, 4, 1, где ki+1=(ki-1)/3,

…31, 15, 7, 3, 1, где ki+1=(ki-1)/2

    • Однако на практике используется более простой алгоритм для вычисления шага цепочки, а именно ki= ki-1*3/5, начиная с k1=N div 2 и заканчивая шагом, равным единице

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