Главная страница
Навигация по странице:

  • Online-edu.mirea.ru ФИО преподавателя: Русаков Алексей Михайлович e-mail: rusakov.a@mirea.ru

  • 1)Алгоритм сортировки «Сравнение и подсчет» 1.1)Пример работы сортировки 1.2) Реализация 2) Описание алгоритма шелла 2.1) Пример работы сортировки 2.3) Примеры реализации на языках программирование

  • Содержание

  • Алгоритм сортировки «Сравнение и подсчет»

  • Пример работы Реализация кода на С

  • Пример реализации на : Пример реализации на

  • Пример реализации на: Пример реализации на

  • Пример реализации на

  • Спасибо за внимание!

  • Технологии и методы программирования


    Скачать 0.71 Mb.
    НазваниеТехнологии и методы программирования
    Дата18.10.2022
    Размер0.71 Mb.
    Формат файлаpptx
    Имя файла5Algoritmi sortirovki.pptx
    ТипДокументы
    #739190
    Технологии и методы программирования

    Online-edu.mirea.ru
    ФИО преподавателя: Русаков Алексей Михайлович
    e-mail: rusakov.a@mirea.ru

    Подготовил студент БСБО-02-19

    Аушев Ахмед Борисович

    На тему: Алгоритмы сортировки. «Сравнение и подсчет». Алгоритм Шелла
    1)Алгоритм сортировки «Сравнение и подсчет» 1.1)Пример работы сортировки 1.2) Реализация 2) Описание алгоритма шелла 2.1) Пример работы сортировки 2.3) Примеры реализации на языках программирование
    Содержание
    Данный метод впервые упоминается в работе Э.Х. Фрэнда, хотя он и не заявил о ней как о своей собственной разработке. Сортировка подсчётом - это алгоритм, основанный на подсчёте повторяющихся элементов в массиве. Общая идея алгоритма (простой вариант): Есть массив A длиной n элементов, который нужно отсортировать. Создаётся вспомогательный массив C с индексами от 0 до k (максимальное значение в массиве A) и заполняется нулями. Последовательно проходим по массиву A и записываем в C[i] количество чисел, равных i. Таким образом индексы в массиве C - это значения массива A, а значение в массиве C - это то, сколько раз это число повторяется в массиве A. Проходим по массиву C и переносим значения в массив A. Алгоритм сортировки «Сравнение и подсчет»
    Сортировка подсчетом (Counting Sort) не использует операции сравнения, и применяется для массива A дискретных данных (например, целых чисел, символов), которые принимают значения из небольшого диапазона 𝑎𝑖 = [0,𝐾 − 1]. Для данного алгоритма применяют вспомогательный массив C, элементы которого с[𝑖] = 𝑐𝑜𝑢𝑛𝑡(А, 𝑖) , где 𝑐𝑜𝑢𝑛𝑡(А, 𝑖) - количество элементов в массиве А, равных значению i. Размер массива С равен максимальному элементу массива А. Приведем пример исходного массива А и вспомогательного массива С. По массиву С легко получить упорядоченный массив А. Делая проход по массиву С, мы столько раз последовательно включаем в массив А элемент i, сколько раз он встречался в А, а именно с[𝑖] раз. Пример работы
    Реализация кода на С

    //array — указатель на начало массива

    //n — размер массива

    //k — максимальное число в массиве

    void countingSort(int* array, int n, int k) {

    int* c = (int*)malloc((k+1) * sizeof(*array));

    memset(c, 0, sizeof(*array)*(k+1));

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

    ++c[array[i]];

    }

    int b = 0;

    for (int i = 0; i < k+1; ++i){

    for (int j = 0; j < c[i]; ++j) {

    array[b++] = i;

    }

    }

    free(c);

    }
    Описание алгоритма Шелла Этот метод сортировки Д. Шелл предложил в 1959 г. Он использует минимум памяти и показывает высокие скорости при сортировке. По сути в методе Шелла применяются сравнения и перестановки элементов аналогичные методу вставок, но при этом порядок сравниваемых элементов совершенно другой. Идея сортировки методом Шелла состоит в том, чтобы сортировать элементы отстоящие друг от друга на некотором расстоянии step. Затем сортировка повторяется при меньших значениях step, и в конце процесс сортировки Шелла завершается при step = 1 (а именно обычной сортировкой вставками). До сих пор продолжает обсуждаться вопрос выбора шага сортировки step. Шелл предложил такую последовательность: N/2, N/4, N/8 …, где N — количество элементов в сортируемом массиве. Пример реализации на :
    Пример реализации на :

    template< typename RandomAccessIterator, typename Compare > void shell_sort( RandomAccessIterator first, RandomAccessIterator last, Compare comp ) { for( auto d = ( last - first ) / 2; d != 0; d /= 2 ) //нужен цикл для first = a[0..d-1] for( auto i = first + d; i != last; ++i ) for( auto j = i; j - first >= d && comp( *j, *( j - d ) ); j -= d ) std::swap( *j, *( j - d ) ); }
    Пример реализации на:
    Пример реализации на:

    const ShellSort = arr => { const l = arr.length; let gap = Math.floor(l / 2); while (gap >= 1) { for (let i = gap; i < l; i++) { const current = arr[i]; let j = i; while (j > 0 && arr[j - gap] > current) { arr[j] = arr[j - gap]; j -= gap; } arr[j] = current; } gap = Math.floor(gap / 2); } return arr; };
    Пример реализации на:

    def shell_sort(data: list[int]) -> list[int]: last_index = len(data) step = len(data)//2 while step > 0: for i in range(step, last_index, 1): j = i delta = j - step while delta >= 0 and data[delta] > data[j]: data[delta], data[j] = data[j], data[delta] j = delta = j - step //= 2 return data

    WhiteSnake
    Спасибо за внимание!


    написать администратору сайта