#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int comparisons=0,swaps=0;
int*CombSort(int*input,int input_size){
int gap=input_size;
double shrink=1.3;
bool swapped;
while (!( gap==1 and swapped==false )){//repeate until gap==1 and swapped==false
gap=int(gap/shrink);
if(gap<1)
{
gap=1;
}//end if
int i=0;
swapped=false;
while(!( i+gap>=input_size )){
comparisons++;
if(input[i]>input[i+gap]){
swap(input[i],input[i+gap]);
swaps++;
swapped=true;
}//end if
i=i+1;
}//end while
}//end while
return input;
}//end combSort
int main()
{
int A[1000];
srand(time(0));
for(int i=0;i<1000;i++)
A[i]=rand();
// cout<<A[i]<<" ";
//cout<<endl;
CombSort(A,1000);
cout<<"comparsisons="<<comparisons<<" swaps="<<swaps<<endl;
//for(int i=0;i<10;i++)
// cout<<A[i]<<" ";
//cout<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGxpYj4KI2luY2x1ZGUgPGN0aW1lPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwppbnQgY29tcGFyaXNvbnM9MCxzd2Fwcz0wOwppbnQqQ29tYlNvcnQoaW50KmlucHV0LGludCBpbnB1dF9zaXplKXsKICAgIGludCBnYXA9aW5wdXRfc2l6ZTsKICAgIGRvdWJsZSBzaHJpbms9MS4zOwogICAgYm9vbCBzd2FwcGVkOwogICAgd2hpbGUgKCEoIGdhcD09MSBhbmQgc3dhcHBlZD09ZmFsc2UgKSl7Ly9yZXBlYXRlIHVudGlsIGdhcD09MSBhbmQgc3dhcHBlZD09ZmFsc2UKICAgICAgICBnYXA9aW50KGdhcC9zaHJpbmspOwogICAgICAgIGlmKGdhcDwxKQogICAgICAgIHsKICAgICAgICAgICAgZ2FwPTE7CiAgICAgICAgfS8vZW5kIGlmCiAgICAgICAgaW50IGk9MDsKICAgICAgICBzd2FwcGVkPWZhbHNlOwogICAgICAgIHdoaWxlKCEoICAgIGkrZ2FwPj1pbnB1dF9zaXplICAgICkpewogICAgICAgIAljb21wYXJpc29ucysrOwogICAgICAgICAgICBpZihpbnB1dFtpXT5pbnB1dFtpK2dhcF0pewogICAgICAgICAgICAgICAgc3dhcChpbnB1dFtpXSxpbnB1dFtpK2dhcF0pOwogICAgICAgICAgICAgICAgc3dhcHMrKzsKICAgICAgICAgICAgICAgIHN3YXBwZWQ9dHJ1ZTsKICAgICAgICAgICAgfS8vZW5kIGlmCiAgICAgICAgICAgIGk9aSsxOwogICAgICAgIH0vL2VuZCB3aGlsZQogICAgfS8vZW5kIHdoaWxlCiAgICByZXR1cm4gaW5wdXQ7Cn0vL2VuZCBjb21iU29ydAppbnQgbWFpbigpCnsKICAgIGludCBBWzEwMDBdOwogICAgc3JhbmQodGltZSgwKSk7CiAgICBmb3IoaW50IGk9MDtpPDEwMDA7aSsrKQogICAgCUFbaV09cmFuZCgpOwogICAgICAvLyAgY291dDw8QVtpXTw8IiAiOwogICAgLy9jb3V0PDxlbmRsOwogICAgQ29tYlNvcnQoQSwxMDAwKTsKICAgIGNvdXQ8PCJjb21wYXJzaXNvbnM9Ijw8Y29tcGFyaXNvbnM8PCIgc3dhcHM9Ijw8c3dhcHM8PGVuZGw7CiAgICAvL2ZvcihpbnQgaT0wO2k8MTA7aSsrKQogICAgICAvLyAgY291dDw8QVtpXTw8IiAiOwogICAgLy9jb3V0PDxlbmRsOwogICAgcmV0dXJuIDA7Cn0=