Рубрики

Программа C ++ для ShellSort

В shellSort мы делаем массив h-отсортированным для большого значения h. Мы продолжаем уменьшать значение h до тех пор, пока оно не станет равным 1. Считается, что массив отсортирован по h, если отсортированы все подсписки каждого h-го элемента.

// C ++ реализация Shell Sort
#include <iostream>

  
/ * функция для сортировки arr используя shellSort * /

void shellSort(int arr[], int n)

{

    // Начинаем с большого разрыва, затем уменьшаем разрыв

    for (int gap = n / 2; gap > 0; gap /= 2) {

        // Делаем вставку с пробелом для этого размера зазора.

        // Первые элементы промежутка arr [0..gap-1] уже расположены в зазоре

        // продолжаем добавлять еще один элемент, пока весь массив не будет

        // пробел отсортирован

        for (int i = gap; i < n; i += 1) {

            // добавляем arr [i] к элементам, которые были отсортированы по пробелу

            // сохранить arr [i] в temp и сделать дыру в позиции i

            int temp = arr[i];

  

            // сдвигаем ранее отсортированные по гэпу элементы до правильного

            // место для arr [i] найдено

            int j;

            for (j = i; j >= gap && arr[j - gap] > temp; j -= gap)

                arr[j] = arr[j - gap];

  

            // помещаем temp (исходный arr [i]) в правильное местоположение

            arr[j] = temp;

        }

    }

}

  

void printArray(int arr[], int n)

{

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

        std::cout << arr[i] << " ";

    std::cout << "\n";

}

  

int main()

{

    int arr[] = { 12, 34, 54, 2, 3 };

    int n = sizeof(arr) / sizeof(arr[0]);

  

    std::cout << "Array before sorting: \n";

    printArray(arr, n);

  

    shellSort(arr, n);

  

    std::cout << "Array after sorting: \n";

    printArray(arr, n);

}

Выход:

Array before sorting: 
12 34 54 2 3 
Array after sorting: 
2 3 12 34 54

Пожалуйста, обратитесь к полной статье на ShellSort для более подробной информации!

Рекомендуемые посты:

Программа C ++ для ShellSort

0.00 (0%) 0 votes