#include <iostream>

using namespace std;

void PutArray(int *array, int size) {

//    cout << " Array:";

    for (int i = 0; i < size; ++i) {
        cout << array[i] << "  ";
    }

    cout << endl;

}

void ShellSort(int *array, int size) {

    int gap = size;

    do {
        gap = gap / 3 + 1;

        for (int i = gap; i < size; i += gap) {
            int tmp = array[i];
            int j = i - gap;
            for (; j >= 0 && tmp < array[j]; j -= gap) {
                array[j + gap] = array[j];
            }
            array[j + gap] = tmp;

        }

    } while (gap > 1);

}

int main() {

    int array[7] = {23, -22, 241, 23, 640, 0, 50};
    // int array[2] = {23, -22};

    int size = sizeof(array) / sizeof(*array);

    PutArray(array, size);

    ShellSort(array, size);

    PutArray(array, size);

    return 0;
}


备份地址: 【O(n^(1.3—2))排序:希尔