冒泡排序
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=n-1;i>=1;i--)
{
for(int j=0;j<i;j++)
{
if(a[j]>a[j+1])
{
swap(a[j],a[j+1]);
}
}
}
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
return 0;
}
- 外层
for
循环控制比较轮数,一共进行n - 1
轮比较,第一轮比较会把最大的元素 “浮” 到数组的末尾,第二轮把次大的元素 “浮” 到倒数第二个位置,依次类推,所以循环变量i
从n - 1
开始,每次递减1
,直到i >= 1
不满足(即i = 0
时结束)。 - 内层
for
循环用于每一轮比较中的相邻元素比较和交换操作,循环变量j
从0
开始,每次递增1
,直到j < i
不满足,也就是在每一轮比较中,会对当前未排序部分的相邻元素依次进行比较。如果发现a[j] > a[j + 1]
,即前一个元素大于后一个元素,就通过swap
函数(这个函数在iostream
头文件所在的标准库中有定义,用于交换两个变量的值)交换这两个元素的位置,这样经过一轮比较后,当前未排序部分的最大元素就会被交换到合适的位置(这一轮比较的最后一个位置)。