该函数采用代表鹅卵石的字符数组,并将数组重新排列为RED,WHITE和BLUE字符。 重新排列时进行的交换次数也会返回。 如果输入合法,并且成功重新排列 ,该函数返回1。如果在 输入中找到非法字符,它将返回0。此代码在C中的最差情况复杂度
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;
}
^^^上面有我的代码。只有一个功能。需要知道该功能的最坏情况复杂性和原因。谢谢!
如果您希望人们回答,您应该在Stack Overflow上发布代码。只需粘贴,选择,然后按Ctrl + K。 – 2013-03-10 02:22:29
请在此处包含该功能的相关文本。你也应该提供一些关于函数渐近复杂性的估计。 – Guvante 2013-03-10 02:23:21
我的预测是O(n) – 2013-03-10 02:24:28