Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






  • Как продвинуть сайт на первые места?
    Вы создали или только планируете создать свой сайт, но не знаете, как продвигать? Продвижение сайта – это не просто процесс, а целый комплекс мероприятий, направленных на увеличение его посещаемости и повышение его позиций в поисковых системах.
    Ускорение продвижения
    Если вам трудно попасть на первые места в поиске самостоятельно, попробуйте технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Если ни один запрос у вас не продвинется в Топ10 за месяц, то в SeoHammer за бустер вернут деньги.
    Начать продвижение сайта
  • Сортировка слиянием






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

    Процесс объединения, наверно, наиболее интересная часть алгоритма и её понять, довольно, не сложно. Подсписки объединяются в рабочий массив, а результат копируется в исходный список. Однако, следует учитывать что при сортировки слишком большого массива могут возникнуть проблемы с составлением рабочего массива. Из-за большого числа сортируемых элементов, программа может обращаться к файлу подкачки что снижает её скорость, также пагубно влияет на время копирования данных из одного массива в другой. Но время выполнения можно увеличить, если применять в связку сортировкой слиянием с другой сортировкой, например с сортировкой вставками. Для этого необходимо выбрать некоторое число элементов массива при достижении которого рекурсия будет остановлена и массив будет досортирован другим методом. Это можно сделать примерно так:

    Листинг 1.Код Delphi/Pascal
    if(max-min)< StopIndex then begin SelctionSort(a, min, max); exit; end;


    StopIndex - это и есть то число которое Вы выбрали для остановки рекурсии.Сам алгоритм в чистом виде выглядит так:

    Листинг 2.Сортировка слиянием
    procedureMergeSort(varar1, ar2: arrayof Integer; min, max: Integer); var middle, int1, int2, int3: Integer; begin ifmin< max then begin //в противном случае массив состоит //из 1-го элемента и упорядочен. middle: =min div2+max div2; // рекурсивно сортируем подсписки MergeSort(ar1, ar2, min, middle); MergeSort(ar1, ar2, middle+1, max); int1: =min; //указатель на 1-й массив int2: =middle+1; //указатель на 2-й массив int3: =min; //указатель на объединённый массив //объединение сортированных массивов while(int1< =middle) and (int2< =max) do begin ifar1[int1] then begin ar2[int3]: =ar1[int1]; int1: =int1+1; end else begin ar2[int3]: =ar1[int2]; int2: =int2+1; end; inc(int3); end; // очистка не пустого списка while(int1< =middle) do begin ar2[int3]: =ar1[int1]; int1: =int1+1; int3: =int3+1; end; while(int2< =middle) do begin ar2[int3]: =ar1[int2]; int2: =int2+1; int3: =int3+1; end; end; //приравнивание входящих массивов forint1: =min tomax do ar1[int1]: =ar2[int1]; end;

     

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

    Результата сравнения сортировки слиянием быстрой сортировкой приведены в таблице. Для тестов использовался компьютер с процессором Pentium-133, 16-Ram. Количество сортируемых элементов равнялось 1млн.

    Диапазон значений Время сортировки слиянием (сек) Время быстрой сортировки(сек)
    1-10млн 4.72 2, 75
    1-1000 4.67 16.12
    1-100 4.75 194.18

     






    © 2023 :: MyLektsii.ru :: Мои Лекции
    Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
    Копирование текстов разрешено только с указанием индексируемой ссылки на источник.