思路很清晰,有一个控制因子shrink,限定每次开始的位置,并用swapped记录每次对局部交换后局部是否有序。虽然进行了两层循环,但是其复杂度却是 O(n*log(n))。 梳子排序。应该是那个shrink因子,让复杂度呈现log(n)的效果。
void combsort(int *arr, int size)
{
float shrink = 1.247330950103979;
int gap = size, swapped = 1, swap, i;
while ((gap > 1) || swapped)
{
if ((gap > 1) || swapped )
{
gap = gap / shrink;
}
swapped = 0;
i = 0;
while((gap + i) < size)
{
if (arr[i] - arr[i+gap] > 0)
{
swap = arr[i];
arr[i] = arr[i + gap];
arr[i + gap] = swap;
swapped ++;
}
i++;
}
}
}