#include <iostream>
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[10]={10,2,3,4,5,6,7,8,9,1};
for(int i=0;i<10;i++)
cout<<A[i]<<" ";
cout<<endl;
CombSort(A,10);
cout<<"comparsisons="<<comparisons<<" swaps="<<swaps<<endl;
for(int i=0;i<10;i++)
cout<<A[i]<<" ";
cout<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKaW50IGNvbXBhcmlzb25zPTAsc3dhcHM9MDsKaW50KkNvbWJTb3J0KGludCppbnB1dCxpbnQgaW5wdXRfc2l6ZSl7CiAgICBpbnQgZ2FwPWlucHV0X3NpemU7CiAgICBkb3VibGUgc2hyaW5rPTEuMzsKICAgIGJvb2wgc3dhcHBlZDsKICAgIHdoaWxlICghKCBnYXA9PTEgYW5kIHN3YXBwZWQ9PWZhbHNlICkpey8vcmVwZWF0ZSB1bnRpbCBnYXA9PTEgYW5kIHN3YXBwZWQ9PWZhbHNlCiAgICAgICAgZ2FwPWludChnYXAvc2hyaW5rKTsKICAgICAgICBpZihnYXA8MSkKICAgICAgICB7CiAgICAgICAgICAgIGdhcD0xOwogICAgICAgIH0vL2VuZCBpZgogICAgICAgIGludCBpPTA7CiAgICAgICAgc3dhcHBlZD1mYWxzZTsKICAgICAgICB3aGlsZSghKCAgICBpK2dhcD49aW5wdXRfc2l6ZSAgICApKXsKICAgICAgICAJY29tcGFyaXNvbnMrKzsKICAgICAgICAgICAgaWYoaW5wdXRbaV0+aW5wdXRbaStnYXBdKXsKICAgICAgICAgICAgICAgIHN3YXAoaW5wdXRbaV0saW5wdXRbaStnYXBdKTsKICAgICAgICAgICAgICAgIHN3YXBzKys7CiAgICAgICAgICAgICAgICBzd2FwcGVkPXRydWU7CiAgICAgICAgICAgIH0vL2VuZCBpZgogICAgICAgICAgICBpPWkrMTsKICAgICAgICB9Ly9lbmQgd2hpbGUKICAgIH0vL2VuZCB3aGlsZQogICAgcmV0dXJuIGlucHV0Owp9Ly9lbmQgY29tYlNvcnQKaW50IG1haW4oKQp7CiAgICBpbnQgQVsxMF09ezEwLDIsMyw0LDUsNiw3LDgsOSwxfTsKICAgIGZvcihpbnQgaT0wO2k8MTA7aSsrKQogICAgICAgIGNvdXQ8PEFbaV08PCIgIjsKICAgIGNvdXQ8PGVuZGw7CiAgICBDb21iU29ydChBLDEwKTsKICAgIGNvdXQ8PCJjb21wYXJzaXNvbnM9Ijw8Y29tcGFyaXNvbnM8PCIgc3dhcHM9Ijw8c3dhcHM8PGVuZGw7CiAgICBmb3IoaW50IGk9MDtpPDEwO2krKykKICAgICAgICBjb3V0PDxBW2ldPDwiICI7CiAgICBjb3V0PDxlbmRsOwogICAgcmV0dXJuIDA7Cn0=