Тема: Алгоритм плавного сортування (SmoothSort)
Чи все правильно з плавним алгоритмом сортування?
Або можно його якось покращити?
#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
#include <iostream>
#include "doctest.h"
using namespace std;
void SmoothSort(int* arr, int len) {
    int gap = 1, i, j;
    while (gap < len)
        gap = 3 * gap + 1;
    while (gap > 1) {
        gap /= 3;
        for (i = gap; i < len; i++) {
            j = i;
            while (j >= gap && arr[j - gap] > arr[j]) {
                swap(arr[j], arr[j - gap]);
                j -= gap;
            }
        }
        gap--;
    }
}
TEST_CASE("SmoothSort test 1") {
    int arr[] = { 5, 3, 2, 10, 6 };
    int n = (sizeof(arr) / sizeof(arr[0]));
    SmoothSort(arr, n);
    int expected[] = { 2, 3, 5, 6, 10 };
    for (size_t i = 0; i < n; i++)
        CHECK(arr[i] == expected[i]);
}
TEST_CASE("SmoothSort test 2") {
    int arr[] = { -3, -7, -2, -10, -6 };
    int n = (sizeof(arr) / sizeof(arr[0]));
    SmoothSort(arr, n);
    int expected[] = { -10, -7, -6, -3, -2 };
    for (size_t i = 0; i < n; i++)
        CHECK(arr[i] == expected[i]);
}
TEST_CASE("SmoothSort test 3") {
    int arr[] = { 5, 5, 5, 3, 3 };
    int n = (sizeof(arr) / sizeof(arr[0]));
    SmoothSort(arr, n);
    int expected[] = { 3, 3, 5, 5, 5 };
    for (size_t i = 0; i < n; i++)
        CHECK(arr[i] == expected[i]);
}