冒泡排序原理:
这一篇百度经验讲得很好,我不多说了
他讲的是C语言,没有关系,冒泡原理都是一样的
空间复杂度是O(1)
时间最优复杂度是O(n),时间最差复杂度是O(n^2);
时间最优复杂度推导
假如我们要对一个数组1,2,4,5进行升序排序,我们第一趟循环就完成了,即3次,理想的情况下只需排序一趟,以此类推,n个数只需n-1次即可排序完成。所以复杂度是O(n)
时间最差复杂度推导
假如我们对一个数组5,4,2,1进行升序排序,这个数组正好是全降序,所以要三趟循环,第一趟比较3次,交换3次,第二趟比较2次,交换2次,第三趟比较1次,交换1次。所以是3*2*1=6次
继续推广,n个数在最差情况下需要n(n-1)/2次比较和交换才能完成,所以时间复杂度为O(n^2)
C++实现
/**
* @author cjy
* @Date 2018/6/19 15:00.*/#include#include
using namespacestd;void print(int a[],intn)
{for (int k = 0; k < n; k++)
{
cout<< a[k] <
}
}intmain()
{
clock_t startTime, endTime;
startTime=clock();int a[8] = { 5,9,7,6,1,8,1