【题目链接】
【题目考点】
1. 冒泡排序
【解题思路】
冒泡排序生成降序序列
【题解代码】
解法1:容易记忆的版本
- 数组下标1~n:
i从1到n-1,j从1到n-i
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, a[25];
cin >> n;
for(int i = 1; i <= n; ++i)
cin >> a[i];
for(int i = 1; i <= n-1; ++i)
for(int j = 1; j <= n-i; ++j)
{
if(a[j] < a[j+1])
swap(a[j], a[j+1]);
}
for(int i = 1; i <= n; ++i)
cout << a[i] << endl;
return 0;
}
- 数组下标0~n-1
i从0到n-1,j从0到n-i-1(这里的‘到’指小于)
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, a[25];
cin >> n;
for(int i = 0; i < n; ++i)
cin >> a[i];
for(int i = 0; i < n-1; ++i)
for(int j = 0; j < n-i-1; ++j)
{
if(a[j] < a[j+1])
swap(a[j], a[j+1]);
}
for(int i = 0; i < n; ++i)
cout << a[i] << endl;
return 0;
}
解法2:
符合冒泡概念的版本
- 数组下标1~n:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, a[25];
cin >> n;
for(int i = 1; i <= n; ++i)
cin >> a[i];
for(int i = n; i >= 2; --i)//这次循环要确定的数的最终位置
for(int j = 1; j <= i - 1; ++j)//要交换的数对的第一个数
{
if(a[j] < a[j+1])
swap(a[j], a[j+1]);
}
for(int i = 1; i <= n; ++i)
cout << a[i] << endl;
return 0;
}
- 数组下标0~n-1
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, a[25];
cin >> 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-1; ++j)
{
if(a[j] < a[j+1])
swap(a[j], a[j+1]);
}
for(int i = 0; i < n; ++i)
cout << a[i] << endl;
return 0;
}