combSort复杂度O(n*log(n)) 虽然是两层循环

    技术2022-05-19  20

    思路很清晰,有一个控制因子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++; } } } 


    最新回复(0)