shell sort c with examples
Техніка сортування оболонки в C ++: повний огляд.
Сортування оболонки часто називають покращенням порівняно зі вставкою. При сортуванні вставки ми беремо кроки на 1, щоб порівняти елементи та поставити їх у належне положення.
У сортуванні оболонки список сортується, розбиваючи його на ряд менших підсписків. Необов’язково, щоб списки мали суміжні елементи. Натомість техніка сортування оболонки використовує інкремент i, який також називається «пробілом», і використовує його для створення списку елементів, які розділяють елементи «i».
=> Дивіться тут, щоб ознайомитися з повним списком підручників з C ++.
Запити sql практикують питання з відповідями
Що ви дізнаєтесь:
Загальний алгоритм
Загальний алгоритм сортування оболонки наведено нижче.
сортування_оболонки (A, N)
де А - список для сортування; N - розмір_зазору
встановити величину проміжку = N, прапор = 1
в той час, як gap_size> 1 або прапор = 1, повторіть
почати
встановити прапор = 0
встановити розмір_різниці = (розмір_зазору + 1) / 2
кінець
для i = 0 до i<(N-gap_size) repeat
почати
якщо A (i + розмір_зазору)> A (i)
поміняти місцями A (i + розмір_зазору), A (i)
встановити прапор = 0
кінець
кінець
Таким чином, у вищезазначеному алгоритмі ми спочатку встановили N, який є пробілом для сортування масиву A за допомогою сортування оболонки. На наступному кроці ми ділимо масив на підмасиви, використовуючи пробіл. Потім на наступному кроці ми сортуємо кожен з підмасивів так, що в кінці циклу ми отримаємо відсортований масив.
Далі, розглянемо детальний приклад, щоб краще зрозуміти сортування оболонки за допомогою зображувального подання.
Ілюстрація
Проілюструємо сортування оболонки на прикладі.
Розглянемо наступний масив з 10 елементів.

Якщо ми надаємо пробіл у 3, то ми матимемо наступні підсписки з кожним елементом, який складається з 3 елементів. Потім ми сортуємо ці три підсписки.

Відсортовані підсписки та отриманий список, який ми отримуємо після об’єднання трьох відсортованих підсписків, показані нижче.

Вищезазначений масив, який ми отримали після злиття відсортованих підмасивів, майже відсортований. Тепер ми можемо виконати сортування вставки в цьому списку та відсортувати весь масив. Цей останній крок показаний нижче для довідки.

Як видно вище, після виконання сортування оболонки та об’єднання відсортованих підсписків нам знадобилося лише три ходи, щоб повністю відсортувати список. Таким чином, ми можемо бачити, що ми можемо значно зменшити кількість кроків, необхідних для сортування масиву.
Вибір приросту для створення підсписків є унікальною особливістю сортування оболонки.
Приклад С ++
Давайте побачимо реалізацію сортування оболонки в C ++ нижче.
#include using namespace std; // shellsort implementation int shellSort(int arr(), int N) { for (int gap = N/2; gap > 0; gap /= 2) { for (int i = gap; i = gap && arr(j - gap) > temp; j -= gap) arr(j) = arr(j - gap); arr(j) = temp; } } return 0; } int main() { int arr() = {45,23,53,43,18,24,8,95,101}, i; //Calculate size of array int N = sizeof(arr)/sizeof(arr(0)); cout << 'Array to be sorted:
'; for (int i=0; i Вихід:
Масив для сортування:
45 23 53 43 18 24 8 95 101
Масив після сортування оболонки:
8 18 23 24 43 45 53 95 101
Ми використовували той самий список, що і на ілюстрації, і бачимо, що спочатку ми створюємо два підсписки, а потім ще більше зменшуємо розрив. Як тільки підсписки створюються відповідно до вказаного пробілу, ми сортуємо кожен із підсписів. Після того, як усі підсписки відсортовані, ми отримуємо майже відсортований список. Тепер цей список можна сортувати за допомогою базової вставки, яка займе дуже мало ходів.
Далі, давайте реалізуємо сортування оболонки за допомогою мови Java.
Приклад Java
// Java class for ShellSort class ShellSort { //function to sort the array using shell sort int sort(int arr()) { int N = arr.length; // Start with a big gap, then narrow the gap for (int gap = N/2; gap > 0; gap /= 2) { //sort sub lists created by applying gap for (int i = gap; i = gap && arr(j - gap) > temp; j -= gap) arr(j) = arr(j - gap); arr(j) = temp; } } return 0; } } class Main{ public static void main(String args()) { int arr() = {45,23,53,43,18,24,8,95,101}; int N = arr.length; System.out.println('Array to be sorted: '); for (int i=0; i Вихід:
Масив для сортування:
45 23 53 43 18 24 8 95 101
Масив після сортування оболонки:
8 18 23 24 43 45 53 95 101
Ми застосували однакову логіку сортування оболонки як в програмах C ++, так і в Java. Таким чином, як пояснено вище в програмі Java, ми спочатку ділимо масив на підмасиви, а потім сортуємо їх, щоб отримати повний відсортований масив.
Висновок
Сортування оболонки - це високоефективний алгоритм, який покращує сортування вставки.
У той час як сортування вставки працює, збільшуючи свої елементи на 1, сортування оболонки використовує параметр 'gap', щоб розділити масив на підмасиви, елементи яких 'розривні'. Тоді ми можемо сортувати окремий список за допомогою вставки, щоб отримати повний відсортований масив.
Сортування оболонки виконується швидше, ніж сортування вставки та займає менше ходів для сортування масиву порівняно із сортуванням вставки. У нашому майбутньому підручнику буде розглянуто все про техніку сортування купи для сортування структур даних.
=> Завітайте сюди, щоб вивчити C ++ з нуля.
Рекомендована література
- Сортування виділення в C ++ із прикладами
- Метод сортування MongoDB () із прикладами
- Команда сортування Unix із синтаксисом, опціями та прикладами
- Сортування міхура в C ++ із прикладами
- Сортування вставки в C ++ із прикладами
- Об’єднати сортування в C ++ із прикладами
- Сортування купи в C ++ з прикладами
- Швидке сортування в C ++ із прикладами