#P2011. 冒泡排序.填空题
冒泡排序.填空题
题目描述
输入 N 个整数,使用插入排序法从小到大输出。
输入格式
第一行 1 个正整数: N ,范围在 [1,1000]。
第二行 N 个整数,每个整数范围在 [0,1000000]。
输出格式
一行 N 个从小到大的整数。
样例
4
5 3 6 1
1 3 5 6
4
5 5 1 9
1 5 5 9
完成程序
把大的数字冒泡到后端
#include<bits/stdc++.h>
using namespace std;
int n,a[1001];
int main()
{
int k,tmp;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=填空(1);填空(2);i--)
{
for(int j=填空(3);填空(4);j++)
{
if(填空(5))
{
tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
}
}
}
for(int i=1;i<=n;i++)
printf("%d ",a[i]);
return 0;
}
填空(1):{{ input(1) }}
填空(2):{{ input(2) }}
填空(3):{{ input(3) }}
填空(4):{{ input(4) }}
填空(5):{{ input(5) }}
把小的数字冒泡到前端
#include<bits/stdc++.h>
using namespace std;
int n,a[1001];
int main()
{
int k,tmp;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=填空(6);填空(7);i++)
{
for(int j=填空(8);填空(9);j--)
{
if(填空(10))
{
tmp=a[j];
a[j]=a[j-1];
a[j-1]=tmp;
}
}
}
for(int i=1;i<=n;i++)
printf("%d ",a[i]);
return 0;
}
填空(6):{{ input(6) }}
填空(7):{{ input(7) }}
填空(8):{{ input(8) }}
填空(9):{{ input(9) }}
填空(10):{{ input(10) }}
补充说明
-
题目说了是冒泡排序,就一定要按照冒泡排序来写。这个算法是约定俗成的,算法的精髓需要体现出来。冒泡排序,分 2 个模式,一个是把大的数字往后冒,另外一个是把小的数字往前冒,都要会。
-
很关键的一点,冒泡排序的比较,一定是相邻两项之间的比较,例如 和 比,或者是 和 比。如果程序是 和 比, 和 不一定是挨着的,那即便这个程序能完成排序的功能,也不是冒泡排序。与此同时,如果在编程题中看见题目讲述只能前后相邻的两个数字交换,从无序到有序,一共做了多少次,这种题目就是考大家冒泡排序的算法了,指向性很清晰的。
-
要看得出
tmp=a[j];a[j]=a[j+1];a[j+1]=a[j]
这 3 句话的意思,这 3 句话是一个组合拳,作为一个整体来理解就很容易读懂,你拆开一句句看,要想半天。 -
几个排序方法要对比来看,看它们各自的特点。如果数据在排序之前就大致有序的,那么插入排序就会很快,如果数据已经是完全有序的,那么插入排序就是比较了 n-1 次。但是对于冒泡排序算法,无论数据是否有序,比较的次数都是一样的,只不过不需要执行前后数据交换的那几行代码。