冒泡法时间复杂度为O(n^2)
这个是改不了的
不可能因为用一个循环实现,就变成了O(N)。。。
所以,并没有什么卵用,只是一种写代码的方式而已。。。
//Swap 用宏实现
#define Swap(a,b,c) ((c)=(a),(a)=(b),(b)=(c))
//第一种方式,,,最简单的
void BubbleSortOneLoop(int ar[], int n)
{
int i = 0;
int l = 0;
while (i < n - 1)//i还是控制最外层
{
if (ar[l] > ar[l +1])
{
int temp = 0;
Swap(ar[l], ar[l + 1], temp);
}
l++;
if (l >=n - i-1)//只不过在特殊点的时候改变l和i
{
l = 0;
i++;
}
}
}
//第二种
void BubbleSortOneLoop2(int ar[], int n)
{
int i = 0;
int l = 0;
while (i<n*n-1)//大次数为n*n-1,%n实现下标循环
{
if (ar[l%n] > ar[l%n + 1] && l%n<n-1-(i/n))//直接判断
{
int temp = 0;
Swap(ar[l%n], ar[l%n + 1], temp);
}
l++; i++;
}
}
时间: 2024-12-25 11:14:11