此代码在C语言中的最坏情况复杂性

此代码在C语言中的最坏情况复杂性,c,complexity-theory,C,Complexity Theory,此函数采用一个字符数组,表示卵石和 将数组重新排列为红色、白色和蓝色字符。 还将返回重新排列时进行的掉期数量。 如果输入合法且重新排列,则函数返回1 成功地如果在中发现非法字符,则返回0 输入 boolean processInput(char *pebbles, int *noOfSwaps){ int low; int mid; int high; *noOfSwaps = 0; low = 0; while (low < str

此函数采用一个字符数组,表示卵石和 将数组重新排列为红色、白色和蓝色字符。 还将返回重新排列时进行的掉期数量。 如果输入合法且重新排列,则函数返回1 成功地如果在中发现非法字符,则返回0 输入

boolean processInput(char *pebbles, int *noOfSwaps){

    int low;
    int mid;
    int high;

    *noOfSwaps = 0;

    low = 0;

    while (low < strlen(pebbles) && color(*(pebbles + low)) == RED)
            low++;

    high = strlen(pebbles) - 1;

    while (high >= 0 && color(*(pebbles + high)) == BLUE)
            high--;

    mid = low;

    while (mid <= high){

            if (color(*(pebbles + mid)) == RED){

                    if (mid == low){

                            low++;
                            mid++;
                    }

                    else{

                            swap((pebbles + mid), (pebbles + low));

                            (*noOfSwaps)++;
                            low++;
                            mid++;
                    }
            }

            else if (color(*(pebbles + mid)) == WHITE)
                    mid++;

            else if (color(*(pebbles + mid)) == BLUE){
                    if (color(*(pebbles + high)) == BLUE)
                            high--;

                    else{
                            swap((pebbles + mid), (pebbles + high));
                            (*noOfSwaps)++;
                            high--;
                    }
            }      
            else
                    return 0;
    }
    return 1;
}
布尔过程输入(char*pebbles,int*noOfSwaps){
int低;
int mid;
int高;
*noOfSwaps=0;
低=0;
而(低=0&&color(*(卵石+高))==蓝色)
高--;
中=低;

当所有鹅卵石都是红色时,(中间这条线将导致最小的
O(n)+O(color())
。如果颜色是
O(1)
(可能是),那么它就是
O(n)

while(低
代码的其余部分似乎只检查每个元素的颜色一次,因此也就是
O(n)+O(color())

所以我将使用
O(n)


编辑:在while循环中调用
strlen
。我将把它升级到
O(n^2)
。其中
n
pebbles
的长度。使它返回到
O(n)
。调用
strlen()
一次,并缓存该值。

如果希望有人回答,则应将代码张贴在堆栈溢出上。只需粘贴、选择并点击Ctrl+K。请在此处包含函数的相关文本。此外,您还应提供关于函数渐进复杂性的一些自己的估计。我的预测为O(n)粗略检查,它似乎是O(n),其中n=strlen(pebbles)。可能的重复-这是第四个相同副本粘贴的作业问题:好的,我感谢这个答案。你是否100%确定当前代码的最坏情况复杂性为O(n^2)…我肯定和kainaw有相同的想法,它是O(n)。请返回给我。如果数组都是红色的,那么我复制到答案中的两行代码将使用
O(n^2)
。其余代码看起来是
O(n)
strlen()
是一个
O(n)
操作,当所有内容都是红色时,您将执行
n
次。
while (low < strlen(pebbles) && color(pebbles[low]) == RED)
    low++;