#include <iostream>
#include <vector>
template <class T>
void shellSort(T list [], int size)
{
using std::swap;
unsigned gap = size / 2;
while (gap > 0)
{
for (size_t i = 0; i < size - gap; i++)
{
if (list[i] > list[i + gap])
{
swap(list[i], list[i + gap]);
}
for (int j = 0; j < size; j++)
{
std::cout << list[j] << " ";
}
std::cout << std::endl;
}
gap /= 2;
}
// bubbleSort(list, size);
}
int main()
{
int data[] = { 5, 2, 7, 2, 3, 4, 1 };
shellSort(data, sizeof(data)/sizeof(*data));
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKdGVtcGxhdGUgPGNsYXNzIFQ+CnZvaWQgc2hlbGxTb3J0KFQgbGlzdCBbXSwgaW50IHNpemUpCnsKICAgIHVzaW5nIHN0ZDo6c3dhcDsKCiAgICB1bnNpZ25lZCBnYXAgPSBzaXplIC8gMjsKICAgIHdoaWxlIChnYXAgPiAwKQogICAgewogICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZSAtIGdhcDsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGxpc3RbaV0gPiBsaXN0W2kgKyBnYXBdKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzd2FwKGxpc3RbaV0sIGxpc3RbaSArIGdhcF0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc2l6ZTsgaisrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzdGQ6OmNvdXQgPDwgbGlzdFtqXSA8PCAiICI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKICAgICAgICB9CiAgICAgICAgZ2FwIC89IDI7CiAgICB9CgogICAgLy8gYnViYmxlU29ydChsaXN0LCBzaXplKTsKfQoKaW50IG1haW4oKQp7CiAgICBpbnQgZGF0YVtdID0geyAgNSwgMiwgNywgMiwgMywgNCwgMSB9OwoKICAgIHNoZWxsU29ydChkYXRhLCBzaXplb2YoZGF0YSkvc2l6ZW9mKCpkYXRhKSk7Cn0K