核心:相邻元素中,左边大于右边元素,则交换
一趟下来之后,会确定该趟找到的最大的元素的位置
#include <iostream>
using namespace std;
const int N = 100010;
int a[N];
int main()
{
int n; cin >> n;
for(int i = 0; i < n; i++)
{
cin >> a[i];
}
for(int i = 0; i < n - 1; i++) // i定义趟数:需要n - 1趟
{
for(int j = 0; j < n - i - 1; j++) // j定义每一趟要进行对比的次数
/* 为什么这里是n - i - 1?
假设这次是排序的第1次:i == 0 那么这一次要想确定一个数组元素的下标,一定需要对比n - 1次
所以待参与排序的数组元素,一定要对比到下标为n - 2的元素,即下标为n - 2的元素和下标为n - 1的元素的比较
因此:当i == 0时,j必须最大要到n - 2,因此定义j < n - i - 1(此时为j < n - 1,恰好能排到下标为n - 2的元素)
*/
{
if(a[j] > a[j + 1])
{
swap(a[j], a[j + 1]);
}
}
}
for(int i = 0; i < n; i++)
{
cout << a[i] << " ";
}
return 0;
}