You are on page 1of 2

#include <iostream>

using namespace std;

int main()
{
//initializarea vectorului
int a[100]={169, 639, 570, 737, 415, 820, 515, 384, 232, 451, 892, 229,
273, 255, 737, 599, 54, 308, 584, 498, 498, 159, 704, 996, 692, 561, 177, 283,
305, 316, 620, 53, 802, 834, 700, 409, 610, 1, 481, 413, 55, 581, 437, 207,
321, 992, 720, 493, 198, 696, 493, 488, 157, 886, 663, 772, 589, 488, 377,
278, 499, 112, 401, 354, 804, 131, 73, 630, 102, 131, 471, 429, 993, 324, 434,
213, 735, 832, 506, 898, 51, 467, 117, 863, 625, 558, 200, 760, 86, 992, 986,
470, 883, 382, 175, 709, 164, 950, 896, 126};
int i, j, aux, n=0;
//afisarea vectorului initial
cout << "Vectorul intial este:" <<endl;
for(i=0;i<100;i++)
{
cout << a[i] << "\t";
}
//sortarea
bool flipped = false; n++;
int gap, top;
gap = 100; n++;
do
{
gap = (int) ((float) gap / 1.3); n++;
n++;
switch (gap)
{
case 0:
gap = 1; n++;
break;
case 9:
case 10:
gap = 11; n++;
break;
default:
break;
}
flipped = false; n++;
top = 100 - gap; n++;
for (i = 0; i < top; i++)
{
j = i + gap; n++;
n++;
if (a[i] > a[j])
{
aux = a[i]; n++;
a[i] = a[j]; n++;
a[j] = aux; n++;
flipped = true; n++;
}
}
} while (flipped || (gap > 1));
//afisarea vectorului sortat
cout << "Vectorul sortat este:" <<endl;
for(i=0;i<100;i++)
{
cout << a[i] << "\t";
}
//afisarea numarului de operatii
cout << "Au fost efectuate " << n << " operatii.";
return 0;
}

int newGap(int gap){


gap /= 1.3;
if(gap == 9 || gap == 10)
gap = 11;
if(gap < 1)
return 1;
return gap;
}

void combSort(int a[], int len){


int gap = len;
bool swapped;
do{
swapped = false;
gap = newGap(gap);
for(int i=0; i < len-gap; ++i){
if(a[i] > a[i+gap]){
swapped = true;
swap(a[i], a[i+gap]);
}
}
}while(gap > 1 || swapped);
}

You might also like