气泡排序的最佳时间复杂度是多少?
(A) N ^ 2
(B) NlogN
(C) N
(D) N(logN)^ 2答案: (C)
说明:如果对输入数据进行排序,那么冒泡排序将处于最佳状态。即,如果输入数据以与预期输出相同的顺序排序。这可以通过使用一个布尔变量来实现。布尔变量用于检查值是否在内循环中至少交换了一次。
考虑以下代码片段:
int main()
{
int arr[] = {10, 20, 30, 40, 50}, i, j, isSwapped;
int n = sizeof(arr) / sizeof(*arr);
isSwapped = 1;
for(i = 0; i < n - 1 && isSwapped; ++i)
{
isSwapped = 0;
for(j = 0; j < n - i - 1; ++j)
if (arr[j] > arr[j + 1])
{
swap(&arr[j], &arr[j + 1]);
isSwapped = 1;
}
}
for(i = 0; i < n; ++i)
printf("%d ", arr[i]);
return 0;
}
请注意,在上面的代码中,外部循环仅运行一次。
这个问题的测验