【发布时间】:2011-11-11 14:56:35
【问题描述】:
我很确定我的答案,但今天和我的朋友讨论过,他说我错了。
我认为这个函数的复杂度在平均和最坏情况下是 O(n^2),在最好情况下是 O(n)。对吧?
现在当 k 不是数组长度时会发生什么? k 是要排序的元素数(而不是整个数组)。
最好和最坏的情况是 O(nk),最好的情况是 O(n)?
这是我的代码:
#include <stdio.h>
void bubblesort(int *arr, int k)
{
// k is the number of item of array you want to sort
// e.g. arr[] = { 4,15,7,1,19} with k as 3 will give
// {4,7,15,1,19} , only first k elements are sorted
int i=k, j=0;
char test=1;
while (i && test)
{
test = 0;
--i;
for (j=0 ; j<i; ++j)
{
if ((arr[j]) > (arr[j+1]))
{
// swap
int temp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
test=1;
}
} // end for loop
} // end while loop
}
int main()
{
int i =0;
int arr[] = { 89,11,15,13,12,10,55};
int n = sizeof(arr)/sizeof(arr[0]);
bubblesort(arr,n-3);
for (i=0;i<n;i++)
{
printf("%d ",arr[i]);
}
return 0;
}
附:这不是作业,只是看起来像一个。我们讨论的函数与冒泡排序非常相似。无论如何,我已经添加了作业标签。
请帮助我确认我是否正确。感谢您的帮助。
【问题讨论】:
-
O(n2) 和 O(n) 是一回事,通常会忽略任何常数因素...另外,您是否看过维基百科关于冒泡排序的文章?
-
我很确定他的意思是 O(n^2),而不是 O(2n)
-
@PlassmaHH ,对不起,你的意思是 O(n^2) 和 O(nk) 是一回事吗?
-
@Kevin,哦,现在我明白是什么造成了混乱。我会编辑那个。谢谢,是的,我就是这个意思
标签: c algorithm time-complexity