tags:
- DSA
SA. Bubble Sort
排序算法的作用是将一组元素按照指定顺序进行排列。常见的顺序包括数字从小到大的升序排列、字母从 A 到 Z 的字典序排列,也可以是其他任意顺序(如降序排列)。高效的排序算法对于系统至关重要,因为它在一定程度上会影响系统的整体性能,尤其是在需要频繁处理大规模数据时。
冒泡排序可以说是最简单的排序算法,它的核心思想是通过多次一步一步地比较和交换(遍历数组),将较大的元素逐步“冒泡”到序列的末尾。每次交换前,都需要需要比较相邻的元素,如果顺序错误,就将两个数据元素进行一次交换(称为”冒泡“)。
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n-1; i++) {
bool swapped = false;
for (int j = 0; j < n-i-1; j++) {
if (arr[j] > arr[j+1]) {
swap(arr[j], arr[j+1]);
swapped = true;
}
}
if (!swapped) break;
}
}
我们来分析一下冒泡排序的时间/空间复杂度。
最坏情况:
数组完全逆序,那么我们就需要遍历所有未排序的元素。也就是遍历 n-1
次,每次遍历比较 n-i-1
次。如此,总共的比较和交换的次数就是:
最好情况:
数组完全有序,这时我们在第一遍遍历时并不会有任何的交换操作,标志位为 false
直接终止。如此我们只需要比较
空间复杂度:
空间复杂度呢?因为冒泡排序只需要使用一个元素空间 temp
,所以它的空间复杂度为