SlideShare a Scribd company logo
Анализ комбинаторных
алгоритмов
Лекция №2
Сортировки, поиск и
порядковые статистики
Сортировка. Общие понятия
 Задача сортировки получает на входе
последовательность и в
результате выдает перестановку ,
такую что
 Обычно сортируются не отдельные числа, а
целые записи. При этом поле, по которому
производится сортировка, называется ключом,
а остальные поля – дополнительными.
),,,,( 321 naaaa 
naaaa ′≤≤′≤′≤′ 321
),,,,( 321 naaaa ′′′′ 
Сортировка. Общие понятия
 Алгоритмы сортировки, которые не требуют
выделения дополнительного массива для
промежуточного хранения данных, часто
называют алгоритмами сортировки без
дополнительной памяти.
 Если предполагается, что все данные
алгоритма помещаются в оперативной памяти,
то говорят о внутренней сортировке.
Сортировка. Общие понятия
При оценке качества алгоритма сортировки
рассматривают две основные величины:
среднее количество сравнений и среднее
количество перестановок.
Для алгоритма «пузырьковой» сортировки верно, что
как в худшем, так и в лучшем случае.
Алгоритм №1.
«Пузырьковая» сортировка.
Исходный
массив
d c a b
1-ый проход a d c b
2-ой проход a b d c
3-ий проход a b c d
void Buble_Sort(n, A)
{
for(i=1; i<n; i++){
for(j = n-1; j>=i; j--){
if (A[ j-1 ] > A[ j ]) {
key = A[ j-1];
A[ j-1] = A[ j ];
A[ j ] = key; }
}
)()( 2
nOnT =
Алгоритм №2.
Сортировка отбором.
Для алгоритма сортировки отбором верно, что
как в худшем, так и в лучшем случае. Однако число
перестановок для данного алгоритма пропорционально n log n.
Исходный
массив
d c a b
1-ый проход a c d b
2-ой проход a b d c
3-ий проход a b c d
)()( 2
nOnT =
Алгоритм №2.
Сортировка отбором.
void Select_Sort(n, A) {
for(i=0; i<n; i++){
c = i; t = A[ i ]; exchange=0;
for(j = i+1; j<n; j++){
if (A[ j ]<t) {
c = j;
t = A[ j ];
exchange = 1;}
}
if (exchange==1) {
A[ c ] =A[ i ];
A[ i ] = t; } }
}
Алгоритм №3.
Сортировка методом Шелла.
Исходный
массив
f d a c b e
1-ый проход c b a f d e
2-ой проход a b c d e f
Результат a b c d e f
Алгоритм №3.
Сортировка методом Шелла.
 Сортировка Шелла более эффективна, чем
ранее рассмотренные методики, поскольку
сдвигаемые элементы быстро попадают на
свои места. Среднее время работы
В худшем случае время работы .
 Последовательность изменения приращений
может меняться. Хорошо зарекомендовала
себя последовательность 9, 5, 3, 2, 1.
)()( 25.1
nOnT =
)()( 5.1
nOnT =
Алгоритм №3.
Сортировка методом Шелла.
st = { 9,5,3,2,1 }
void Shell_Sort(n, A) {
for(k=0; k<5; k++){
gap = st[ k ];
for( i=gap; i<n; i++){
x = A[ i ];
for ( j=I - gap; x<A[ j ] && j>=0; j = j - gap)
A[ j + gap] = A[ j ];
A[ j + gap ] = x;
}
}
}
Выбор метода сортировки.
 Необходимый метод сортировки всегда
выбирается исходя из контекста задачи.
 При сортировке массивов больших размеров
лучше использовать метод Шелла или
быструю сортировку. На небольших
массивах лучшие результаты могут показать
алгоритмы сортировки вставками, выбором
и даже пузырьковая сортировка.
Выбор метода сортировки.
 Существует ряд методов сортировки,
позволяющих сортировать массивы за меньшее
время, при условии, что заранее известна
структура сортируемых объектов.
 Для сортировки последовательности чисел
используются алгоритмы сортировки
подсчетом, вычерпыванием и цифровой
сортировки, обеспечивающих среднее время:
)()( nOnT =
Алгоритм №4.
Сортировка подсчетом.
 Алгоритм применим, если каждый элемент
сортируемой последовательности – целое
положительное число, не превосходящее
заранее известное k.
 Идея алгоритма в том, чтобы для каждого
элемента X подсчитать сколько элементов
входной последовательности больше него, а
затем вставить его в нужное место выходного
массива.
Алгоритм №4.
Сортировка подсчетом.
void Counting_Sort(n, A, B) {
for(i=0; i<k; i++){ C[ i ] = 0; }
for(i=0; i<n; i++){ C[ A[ i ] ] = C[ A[ i ]]+1 };
for(i=1; i<k; i++){ C[ i ] = C[ i ]+C[ i-1 ] };
for(i = n; i>=0; i--) {
B [ C[ A[ i ] ] ] = A[ i ];
C [ A[ i ] ] = C[ A[ i ] ] -1;
}
}
Поиск.
 Нахождение информации в неотсортированном
массиве требует последовательного поиска,
начиная с первого элемента и завершая его при
нахождении совпадения или достижении конца
массива. Этот процесс также называют
линейным поиском.
 Усовершенствовать алгоритм поиска можно,
если входная последовательность будет
отсортирована.
Алгоритм №5.
Бинарный поиск.
void Binary_Search(A, n, key) {
low = 0; high=n-1;
while(low<=high){
mid = (low+high)/2;
if(key<A[mid]) high=mid-1;
else if (key>A[mid]) low=mid+1;
else return mid;
}
return -1;
}
Порядковые статистики.
 Если расположить элементы входной
последовательности по возрастанию, i-ый по
счету ее элемент называется i-той
порядковой статистикой.
 Минимум последовательности – 1-ая
порядковая статистика.
 Максимум последовательности – n-ая
порядковая статистика.
 Медиана – элемент, находящийся посредине
между максимумом и минимумом.

More Related Content

What's hot

Лекция №3. Свойства и моделирование стандартных схем программ. Предмет "Теори...
Лекция №3. Свойства и моделирование стандартных схем программ. Предмет "Теори...Лекция №3. Свойства и моделирование стандартных схем программ. Предмет "Теори...
Лекция №3. Свойства и моделирование стандартных схем программ. Предмет "Теори...Nikolay Grebenshikov
 
Лекция 11: Методы разработки алгоритмов
Лекция 11: Методы разработки алгоритмовЛекция 11: Методы разработки алгоритмов
Лекция 11: Методы разработки алгоритмовMikhail Kurnosov
 
практика 12
практика 12практика 12
практика 12student_kai
 
Основы языка Питон: типы данных, операторы
Основы языка Питон: типы данных, операторыОсновы языка Питон: типы данных, операторы
Основы языка Питон: типы данных, операторы
Theoretical mechanics department
 
теория рекурсивных функций
теория рекурсивных функцийтеория рекурсивных функций
теория рекурсивных функций
Mariya_Lastochkina
 
Python: Модули и пакеты
Python: Модули и пакетыPython: Модули и пакеты
Python: Модули и пакеты
Theoretical mechanics department
 
Оценка сложности алгоритма
Оценка сложности алгоритмаОценка сложности алгоритма
Оценка сложности алгоритма
Нижегородский институт управления
 
Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)
Mikhail Kurnosov
 
семенищев
семенищевсеменищев
семенищевIvan
 
A System of Deductive Verification of Predicate Programs
A System of Deductive Verification of Predicate ProgramsA System of Deductive Verification of Predicate Programs
A System of Deductive Verification of Predicate Programs
Iosif Itkin
 
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировкиЛекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировкиMikhail Kurnosov
 
Matematicheskie trenazhery
Matematicheskie trenazheryMatematicheskie trenazhery
Matematicheskie trenazhery
ssusera868ff
 
19 pascal urok_3
19 pascal urok_319 pascal urok_3
19 pascal urok_3Ann Eres
 
23
2323
2014.12.06 04 Евгений Тюменцев — Откуда появились s.o.l.i.d. принципы
2014.12.06 04 Евгений Тюменцев — Откуда появились s.o.l.i.d. принципы2014.12.06 04 Евгений Тюменцев — Откуда появились s.o.l.i.d. принципы
2014.12.06 04 Евгений Тюменцев — Откуда появились s.o.l.i.d. принципы
HappyDev
 
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
etyumentcev
 
Основы Python. Функции
Основы Python. ФункцииОсновы Python. Функции
Основы Python. Функции
Theoretical mechanics department
 
Математическое обоснование SOLID принципов - Евгений Тюменцев Dev2Dev v2.0 30...
Математическое обоснование SOLID принципов - Евгений Тюменцев Dev2Dev v2.0 30...Математическое обоснование SOLID принципов - Евгений Тюменцев Dev2Dev v2.0 30...
Математическое обоснование SOLID принципов - Евгений Тюменцев Dev2Dev v2.0 30...
Dev2Dev
 

What's hot (20)

Лекция №3. Свойства и моделирование стандартных схем программ. Предмет "Теори...
Лекция №3. Свойства и моделирование стандартных схем программ. Предмет "Теори...Лекция №3. Свойства и моделирование стандартных схем программ. Предмет "Теори...
Лекция №3. Свойства и моделирование стандартных схем программ. Предмет "Теори...
 
Лекция 11: Методы разработки алгоритмов
Лекция 11: Методы разработки алгоритмовЛекция 11: Методы разработки алгоритмов
Лекция 11: Методы разработки алгоритмов
 
практика 12
практика 12практика 12
практика 12
 
Python
PythonPython
Python
 
Основы языка Питон: типы данных, операторы
Основы языка Питон: типы данных, операторыОсновы языка Питон: типы данных, операторы
Основы языка Питон: типы данных, операторы
 
теория рекурсивных функций
теория рекурсивных функцийтеория рекурсивных функций
теория рекурсивных функций
 
Python: Модули и пакеты
Python: Модули и пакетыPython: Модули и пакеты
Python: Модули и пакеты
 
Оценка сложности алгоритма
Оценка сложности алгоритмаОценка сложности алгоритма
Оценка сложности алгоритма
 
лекция 11
лекция 11лекция 11
лекция 11
 
Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)
 
семенищев
семенищевсеменищев
семенищев
 
A System of Deductive Verification of Predicate Programs
A System of Deductive Verification of Predicate ProgramsA System of Deductive Verification of Predicate Programs
A System of Deductive Verification of Predicate Programs
 
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировкиЛекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
 
Matematicheskie trenazhery
Matematicheskie trenazheryMatematicheskie trenazhery
Matematicheskie trenazhery
 
19 pascal urok_3
19 pascal urok_319 pascal urok_3
19 pascal urok_3
 
23
2323
23
 
2014.12.06 04 Евгений Тюменцев — Откуда появились s.o.l.i.d. принципы
2014.12.06 04 Евгений Тюменцев — Откуда появились s.o.l.i.d. принципы2014.12.06 04 Евгений Тюменцев — Откуда появились s.o.l.i.d. принципы
2014.12.06 04 Евгений Тюменцев — Откуда появились s.o.l.i.d. принципы
 
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
математическое обоснование Solid принципов. Конференция dotnetconf (Челябинск...
 
Основы Python. Функции
Основы Python. ФункцииОсновы Python. Функции
Основы Python. Функции
 
Математическое обоснование SOLID принципов - Евгений Тюменцев Dev2Dev v2.0 30...
Математическое обоснование SOLID принципов - Евгений Тюменцев Dev2Dev v2.0 30...Математическое обоснование SOLID принципов - Евгений Тюменцев Dev2Dev v2.0 30...
Математическое обоснование SOLID принципов - Евгений Тюменцев Dev2Dev v2.0 30...
 

Similar to Лекция 2 Сортировки, поиск и порядковые статистики

Алгоритмы и структуры данных весна 2014 лекция 3
Алгоритмы и структуры данных весна 2014 лекция 3Алгоритмы и структуры данных весна 2014 лекция 3
Алгоритмы и структуры данных весна 2014 лекция 3Technopark
 
Алгоритмы сортировки
Алгоритмы сортировкиАлгоритмы сортировки
Алгоритмы сортировки
kogoga
 
Алгоритмы сортировки
Алгоритмы сортировкиАлгоритмы сортировки
Алгоритмы сортировки
kogoga
 
Алгоритмы сортировки
Алгоритмы сортировкиАлгоритмы сортировки
Алгоритмы сортировки
kogoga
 
Алгоритмы сортировки
Алгоритмы сортировкиАлгоритмы сортировки
Алгоритмы сортировки
kogoga
 
1332519 (1).pptx
1332519 (1).pptx1332519 (1).pptx
1332519 (1).pptx
rdes1
 
Алгоритмы поиска и сортировки
Алгоритмы  поиска и сортировкиАлгоритмы  поиска и сортировки
Алгоритмы поиска и сортировки
Unguryan Vitaliy
 
Алгоритмы и структуры данных осень 2013 лекция 3
Алгоритмы и структуры данных осень 2013 лекция 3Алгоритмы и структуры данных осень 2013 лекция 3
Алгоритмы и структуры данных осень 2013 лекция 3Technopark
 
Алгоритмы и структуры данных весна 2014 лекция 1
Алгоритмы и структуры данных весна 2014 лекция 1Алгоритмы и структуры данных весна 2014 лекция 1
Алгоритмы и структуры данных весна 2014 лекция 1Technopark
 
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.sharikdp
 
Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"
Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"
Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"Nikolay Grebenshikov
 
сортировка
сортировкасортировка
сортировкаaianami
 
Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1Technopark
 
Рекурсия. Поиск
Рекурсия. ПоискРекурсия. Поиск
Рекурсия. Поиск
Olexandra Dmytrenko
 
практика 7
практика 7практика 7
практика 7student_kai
 
Алгоритм
АлгоритмАлгоритм
Алгоритм
Vlad Ivanishin
 
!Predictive analytics part_2
!Predictive analytics part_2!Predictive analytics part_2
!Predictive analytics part_2
Vladimir Krylov
 
Лекция 2. Алгоритмы сортировки
Лекция 2. Алгоритмы сортировкиЛекция 2. Алгоритмы сортировки
Лекция 2. Алгоритмы сортировки
Mikhail Kurnosov
 
практика 5
практика 5практика 5
практика 5student_kai
 

Similar to Лекция 2 Сортировки, поиск и порядковые статистики (20)

Алгоритмы и структуры данных весна 2014 лекция 3
Алгоритмы и структуры данных весна 2014 лекция 3Алгоритмы и структуры данных весна 2014 лекция 3
Алгоритмы и структуры данных весна 2014 лекция 3
 
Алгоритмы сортировки
Алгоритмы сортировкиАлгоритмы сортировки
Алгоритмы сортировки
 
Алгоритмы сортировки
Алгоритмы сортировкиАлгоритмы сортировки
Алгоритмы сортировки
 
Алгоритмы сортировки
Алгоритмы сортировкиАлгоритмы сортировки
Алгоритмы сортировки
 
Алгоритмы сортировки
Алгоритмы сортировкиАлгоритмы сортировки
Алгоритмы сортировки
 
1332519 (1).pptx
1332519 (1).pptx1332519 (1).pptx
1332519 (1).pptx
 
Алгоритмы поиска и сортировки
Алгоритмы  поиска и сортировкиАлгоритмы  поиска и сортировки
Алгоритмы поиска и сортировки
 
Алгоритмы и структуры данных осень 2013 лекция 3
Алгоритмы и структуры данных осень 2013 лекция 3Алгоритмы и структуры данных осень 2013 лекция 3
Алгоритмы и структуры данных осень 2013 лекция 3
 
Алгоритмы и структуры данных весна 2014 лекция 1
Алгоритмы и структуры данных весна 2014 лекция 1Алгоритмы и структуры данных весна 2014 лекция 1
Алгоритмы и структуры данных весна 2014 лекция 1
 
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.
 
Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"
Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"
Лекция №3. Анализ алгоритмов. Предмет "Структуры и алгоритмы обработки данных"
 
сортировка
сортировкасортировка
сортировка
 
Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1Алгоритмы и структуры данных осень 2013 лекция 1
Алгоритмы и структуры данных осень 2013 лекция 1
 
Рекурсия. Поиск
Рекурсия. ПоискРекурсия. Поиск
Рекурсия. Поиск
 
практика 7
практика 7практика 7
практика 7
 
4 algoritm
4 algoritm4 algoritm
4 algoritm
 
Алгоритм
АлгоритмАлгоритм
Алгоритм
 
!Predictive analytics part_2
!Predictive analytics part_2!Predictive analytics part_2
!Predictive analytics part_2
 
Лекция 2. Алгоритмы сортировки
Лекция 2. Алгоритмы сортировкиЛекция 2. Алгоритмы сортировки
Лекция 2. Алгоритмы сортировки
 
практика 5
практика 5практика 5
практика 5
 

More from simple_people

Лекция 15 Поиск подстрок
Лекция 15 Поиск подстрокЛекция 15 Поиск подстрок
Лекция 15 Поиск подстрок
simple_people
 
Лекция 16 Вычислительная геометрия
Лекция 16 Вычислительная геометрияЛекция 16 Вычислительная геометрия
Лекция 16 Вычислительная геометрия
simple_people
 
Лекция 17 Арифметические схемы
Лекция 17 Арифметические схемыЛекция 17 Арифметические схемы
Лекция 17 Арифметические схемы
simple_people
 
Лекция 7 Элементарные структуры данных часть 5
Лекция 7 Элементарные структуры данных часть 5Лекция 7 Элементарные структуры данных часть 5
Лекция 7 Элементарные структуры данных часть 5
simple_people
 
Лекция 14 Матрицы
Лекция 14 МатрицыЛекция 14 Матрицы
Лекция 14 Матрицы
simple_people
 
Лекция 13 Теоретико-числовые алгоритмы Часть 2
Лекция 13 Теоретико-числовые алгоритмы Часть 2Лекция 13 Теоретико-числовые алгоритмы Часть 2
Лекция 13 Теоретико-числовые алгоритмы Часть 2
simple_people
 
Лекция 12 Теоретико-числовые алгоритмы Часть 1
Лекция 12 Теоретико-числовые алгоритмы Часть 1Лекция 12 Теоретико-числовые алгоритмы Часть 1
Лекция 12 Теоретико-числовые алгоритмы Часть 1
simple_people
 
Лекция 10 NP-полнота
Лекция 10 NP-полнотаЛекция 10 NP-полнота
Лекция 10 NP-полнота
simple_people
 
Лекция 9 Жадные алгоритмы
Лекция 9 Жадные алгоритмыЛекция 9 Жадные алгоритмы
Лекция 9 Жадные алгоритмы
simple_people
 
Лекция 4 Элементарные структуры данных часть 2
Лекция 4 Элементарные структуры данных часть 2Лекция 4 Элементарные структуры данных часть 2
Лекция 4 Элементарные структуры данных часть 2
simple_people
 
Лекция 5 Элементарные структуры данных часть 3
Лекция 5 Элементарные структуры данных часть 3Лекция 5 Элементарные структуры данных часть 3
Лекция 5 Элементарные структуры данных часть 3
simple_people
 
Лекция 6 Элементарные структуры данных часть 4
Лекция 6 Элементарные структуры данных часть 4Лекция 6 Элементарные структуры данных часть 4
Лекция 6 Элементарные структуры данных часть 4
simple_people
 
Лекция 3 Элементарные структуры данных Часть 1
Лекция 3 Элементарные структуры данных Часть 1Лекция 3 Элементарные структуры данных Часть 1
Лекция 3 Элементарные структуры данных Часть 1
simple_people
 
Мобильные Сервисные Службы
Мобильные Сервисные СлужбыМобильные Сервисные Службы
Мобильные Сервисные Службы
simple_people
 

More from simple_people (14)

Лекция 15 Поиск подстрок
Лекция 15 Поиск подстрокЛекция 15 Поиск подстрок
Лекция 15 Поиск подстрок
 
Лекция 16 Вычислительная геометрия
Лекция 16 Вычислительная геометрияЛекция 16 Вычислительная геометрия
Лекция 16 Вычислительная геометрия
 
Лекция 17 Арифметические схемы
Лекция 17 Арифметические схемыЛекция 17 Арифметические схемы
Лекция 17 Арифметические схемы
 
Лекция 7 Элементарные структуры данных часть 5
Лекция 7 Элементарные структуры данных часть 5Лекция 7 Элементарные структуры данных часть 5
Лекция 7 Элементарные структуры данных часть 5
 
Лекция 14 Матрицы
Лекция 14 МатрицыЛекция 14 Матрицы
Лекция 14 Матрицы
 
Лекция 13 Теоретико-числовые алгоритмы Часть 2
Лекция 13 Теоретико-числовые алгоритмы Часть 2Лекция 13 Теоретико-числовые алгоритмы Часть 2
Лекция 13 Теоретико-числовые алгоритмы Часть 2
 
Лекция 12 Теоретико-числовые алгоритмы Часть 1
Лекция 12 Теоретико-числовые алгоритмы Часть 1Лекция 12 Теоретико-числовые алгоритмы Часть 1
Лекция 12 Теоретико-числовые алгоритмы Часть 1
 
Лекция 10 NP-полнота
Лекция 10 NP-полнотаЛекция 10 NP-полнота
Лекция 10 NP-полнота
 
Лекция 9 Жадные алгоритмы
Лекция 9 Жадные алгоритмыЛекция 9 Жадные алгоритмы
Лекция 9 Жадные алгоритмы
 
Лекция 4 Элементарные структуры данных часть 2
Лекция 4 Элементарные структуры данных часть 2Лекция 4 Элементарные структуры данных часть 2
Лекция 4 Элементарные структуры данных часть 2
 
Лекция 5 Элементарные структуры данных часть 3
Лекция 5 Элементарные структуры данных часть 3Лекция 5 Элементарные структуры данных часть 3
Лекция 5 Элементарные структуры данных часть 3
 
Лекция 6 Элементарные структуры данных часть 4
Лекция 6 Элементарные структуры данных часть 4Лекция 6 Элементарные структуры данных часть 4
Лекция 6 Элементарные структуры данных часть 4
 
Лекция 3 Элементарные структуры данных Часть 1
Лекция 3 Элементарные структуры данных Часть 1Лекция 3 Элементарные структуры данных Часть 1
Лекция 3 Элементарные структуры данных Часть 1
 
Мобильные Сервисные Службы
Мобильные Сервисные СлужбыМобильные Сервисные Службы
Мобильные Сервисные Службы
 

Лекция 2 Сортировки, поиск и порядковые статистики

  • 2. Сортировка. Общие понятия  Задача сортировки получает на входе последовательность и в результате выдает перестановку , такую что  Обычно сортируются не отдельные числа, а целые записи. При этом поле, по которому производится сортировка, называется ключом, а остальные поля – дополнительными. ),,,,( 321 naaaa  naaaa ′≤≤′≤′≤′ 321 ),,,,( 321 naaaa ′′′′ 
  • 3. Сортировка. Общие понятия  Алгоритмы сортировки, которые не требуют выделения дополнительного массива для промежуточного хранения данных, часто называют алгоритмами сортировки без дополнительной памяти.  Если предполагается, что все данные алгоритма помещаются в оперативной памяти, то говорят о внутренней сортировке.
  • 4. Сортировка. Общие понятия При оценке качества алгоритма сортировки рассматривают две основные величины: среднее количество сравнений и среднее количество перестановок.
  • 5. Для алгоритма «пузырьковой» сортировки верно, что как в худшем, так и в лучшем случае. Алгоритм №1. «Пузырьковая» сортировка. Исходный массив d c a b 1-ый проход a d c b 2-ой проход a b d c 3-ий проход a b c d void Buble_Sort(n, A) { for(i=1; i<n; i++){ for(j = n-1; j>=i; j--){ if (A[ j-1 ] > A[ j ]) { key = A[ j-1]; A[ j-1] = A[ j ]; A[ j ] = key; } } )()( 2 nOnT =
  • 6. Алгоритм №2. Сортировка отбором. Для алгоритма сортировки отбором верно, что как в худшем, так и в лучшем случае. Однако число перестановок для данного алгоритма пропорционально n log n. Исходный массив d c a b 1-ый проход a c d b 2-ой проход a b d c 3-ий проход a b c d )()( 2 nOnT =
  • 7. Алгоритм №2. Сортировка отбором. void Select_Sort(n, A) { for(i=0; i<n; i++){ c = i; t = A[ i ]; exchange=0; for(j = i+1; j<n; j++){ if (A[ j ]<t) { c = j; t = A[ j ]; exchange = 1;} } if (exchange==1) { A[ c ] =A[ i ]; A[ i ] = t; } } }
  • 8. Алгоритм №3. Сортировка методом Шелла. Исходный массив f d a c b e 1-ый проход c b a f d e 2-ой проход a b c d e f Результат a b c d e f
  • 9. Алгоритм №3. Сортировка методом Шелла.  Сортировка Шелла более эффективна, чем ранее рассмотренные методики, поскольку сдвигаемые элементы быстро попадают на свои места. Среднее время работы В худшем случае время работы .  Последовательность изменения приращений может меняться. Хорошо зарекомендовала себя последовательность 9, 5, 3, 2, 1. )()( 25.1 nOnT = )()( 5.1 nOnT =
  • 10. Алгоритм №3. Сортировка методом Шелла. st = { 9,5,3,2,1 } void Shell_Sort(n, A) { for(k=0; k<5; k++){ gap = st[ k ]; for( i=gap; i<n; i++){ x = A[ i ]; for ( j=I - gap; x<A[ j ] && j>=0; j = j - gap) A[ j + gap] = A[ j ]; A[ j + gap ] = x; } } }
  • 11. Выбор метода сортировки.  Необходимый метод сортировки всегда выбирается исходя из контекста задачи.  При сортировке массивов больших размеров лучше использовать метод Шелла или быструю сортировку. На небольших массивах лучшие результаты могут показать алгоритмы сортировки вставками, выбором и даже пузырьковая сортировка.
  • 12. Выбор метода сортировки.  Существует ряд методов сортировки, позволяющих сортировать массивы за меньшее время, при условии, что заранее известна структура сортируемых объектов.  Для сортировки последовательности чисел используются алгоритмы сортировки подсчетом, вычерпыванием и цифровой сортировки, обеспечивающих среднее время: )()( nOnT =
  • 13. Алгоритм №4. Сортировка подсчетом.  Алгоритм применим, если каждый элемент сортируемой последовательности – целое положительное число, не превосходящее заранее известное k.  Идея алгоритма в том, чтобы для каждого элемента X подсчитать сколько элементов входной последовательности больше него, а затем вставить его в нужное место выходного массива.
  • 14. Алгоритм №4. Сортировка подсчетом. void Counting_Sort(n, A, B) { for(i=0; i<k; i++){ C[ i ] = 0; } for(i=0; i<n; i++){ C[ A[ i ] ] = C[ A[ i ]]+1 }; for(i=1; i<k; i++){ C[ i ] = C[ i ]+C[ i-1 ] }; for(i = n; i>=0; i--) { B [ C[ A[ i ] ] ] = A[ i ]; C [ A[ i ] ] = C[ A[ i ] ] -1; } }
  • 15. Поиск.  Нахождение информации в неотсортированном массиве требует последовательного поиска, начиная с первого элемента и завершая его при нахождении совпадения или достижении конца массива. Этот процесс также называют линейным поиском.  Усовершенствовать алгоритм поиска можно, если входная последовательность будет отсортирована.
  • 16. Алгоритм №5. Бинарный поиск. void Binary_Search(A, n, key) { low = 0; high=n-1; while(low<=high){ mid = (low+high)/2; if(key<A[mid]) high=mid-1; else if (key>A[mid]) low=mid+1; else return mid; } return -1; }
  • 17. Порядковые статистики.  Если расположить элементы входной последовательности по возрастанию, i-ый по счету ее элемент называется i-той порядковой статистикой.  Минимум последовательности – 1-ая порядковая статистика.  Максимум последовательности – n-ая порядковая статистика.  Медиана – элемент, находящийся посредине между максимумом и минимумом.