冒泡排序的时间复杂度和空间复杂度
基本步骤
1.外循环是遍历每个元素,每次都放置好一个元素;
2.内循环是比较相邻的两个元素,把大的元素交换到后面;
3.等到第一步中循环好了以后也就说明全部元素排序好了;
代码实现
void bubbleSort(int array[], int length)
{
int i, j, tmp;
if (1 >= length) return;// 判断参数条件
for (i = length-1; i > 0; i--){//外循环,循环每个元素
for (j = 0; j < i; j++){ // 内循环,
if (array[j] > array[j+1]){// 交换相邻的两个元素
tmp = array[j];
array[j] = array[j+1];
array[j+1] = tmp;
}
}
}
}
时间复杂度:
最优的情况是不用交换排序,一开始一切都排序好了时间花销为:[n(n-1)/2]; 复杂度为O(n)。
最差的情况就是排序的时候,全部从大到小逆序的,花销时间为[3n(n-1)]/2,所以左茶的情况下时间的负载度是执行次数平方为O(n²)。
空间复杂度:
最优的空间复杂度,就是不需要借用第三方内存空间,则复杂度为0。
以下三种方法都不需要申请临时空间来交换元素,
a = a + b; b = a - b; a = a - b;
a = a * b; b = a / b; a = a / b;
a = a ^ b; b = a ^ b;a = a ^ b;
最差的空间复杂度就是开始元素逆序排序,每次都要借用一次内存,按照实际的循环次数,为O(N)。