思想
冒泡排序(BubbleSort)以其“在排序过程中相邻元素不断交换,一些元素慢慢被换到最后,看起来就像是元素在冒泡一样”而得名,是一种简单的基于关键词比较的排序算法。
冒泡排序的原理(以递增序为例)
是每次从头开始依次比较相邻的两个元素,如果后面一个元素比前一个要大,说明顺序不对,则将它们交换,本次循环完毕之后再次从头开始扫描,直到某次扫描中没有元素交换,说明每个元素都不比它后面的元素大,至此排序完成。
实现
void BubbleSort(int* a, int n){//降序
for(int j = n - 1; j > 0; j--){
for(int i = 1; i <= j; i++){
if(a[i-1] > a[i]){
swap(a[i-1], a[i]);
flag = 1;
}
}
}
}
优化:当某次冒泡完成后,已经完成了排序, 那么我们就跳过这次排序。
void BubbleSort(int* a, int n){//降序
for(int j = n - 1; j > 0; j--){
int flag = 0;
for(int i = 1; i <= j; i++){
if(a[i-1] > a[i]){
swap(a[i-1], a[i]);
flag = 1;
}
}
if(flag == 0){
break;
}
}
}
空间复杂度:O(1
时间复杂度:O(N^2)