例如:按从小到大排序1,5,3,2四个数
冒泡排序过程如下:
1和5进行比较,5较大,位置不变,1和3进行比较,3较大,位置不变,1和2进行比较,2较大,位置不变 当前顺序为1,5,3,2
5和3进行比较,5较大,交换位置,5和2进行比较,5较大,交换位置 当前顺序为1,3,2,5
3和2进行比较,3较大,交换位置 当前顺序为1,2,3,5
2无需比较
#include<bits/stdc++.h>
using namespace std;
int main(){
int i,j,temp,n; //比较n个数
cin >> n;
int a[n];
for(i = 0; i < n; i++)
cin >> a[i];
for(i = n - 1; i > 0; i--)
for(j = 0; j < i; j++)
if(a[j] > a[j+1]){
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp; //交换,定义变量temp
}
for(i = 0; i < n; i++)
cout << a[i] << " "; //输出
return 0;
}
这里有一个变量temp的问题:如果直接a[ j ] = a[ j+1] ,a[ j+1]的值赋到了a[ j ],但是a[ j ]的值被覆盖了,导致a[ j+1] = a[ j ]的时候a[ j+1]的值相当于没变,因为a[ j ] = a[ j+1],所以要定义一个temp变量来存放a[ j ]的值(a[ j+1]也可以,看个人习惯),这样就可以实现交换啦
若有问题,请指出