目录
一、算法思想
二、例子
三、代码实现
四、验证
五、算法性能分析
注意:要分清楚交换次数和移动次数
六、总结
一、算法思想
从后往前,两两比较相邻元素的值,若为逆序,则交换它们的值,直到全部比较完。
二、例子
1、有以下序列,我们要将其进行冒泡排序将其变为升序序列。
2、我们从后往前依次对比,比较27和49,发现49大于27,正序,所以不用交换位置
3、然后比较13和27,发现27大于13,正序,所以不用交换位置
4、比较13和76,13小于76,交换它们的值
5、比较13和97,13小于97,交换它们的值
6、比较13和65,13小于65,交换它们的值
7、比较13和38,13小于38,交换它们的值
8、比较13和49,13小于49,交换它们的值
9、最后完成第一轮的对比
10、第一轮对比我们把序列中最小的值放到了最前面,所以下一次循环就不用再对比13了,最终模仿上面进行5轮交换后,得到最终的升序序列。
三、代码实现
#include "bits/stdc++.h"
using namespace std;
void BubbleSort(int a[],int n){
int temp;
for (int i = 0; i < n; ++i) {//设置对比的边界
for (int j = n-1; j > i ; --j) {//从后往前比较相邻的两个数
if (a[j]<a[j-1]){//若逆序则交换
temp = a[j];
a[j] = a[j-1];
a[j-1] = temp;
}
}
}
}
int main(){
int count,arr[10];
scanf("%d",&count);//输入数组长度
for (int i = 0; i < count; ++i) {
scanf("%d",&arr[i]);//输入数组
}
BubbleSort(arr,count);//调用排序函数
for (int i = 0; i < count; ++i) {
printf("%d ",arr[i]);//输出数组
}
return 0;
}