题目描述:
对输入的n个数进行排序并输出。输入:
输入的第一行包括一个整数n(1<=n<=100)。
接下来的一行包括n个整数。
输出:
可能有多组测试数据,对于每组数据,将排序后的n个整数输出,每个数后面都有一个空格。
每组测试数据的结果占一行。
样例输入:
4
1 4 3 2
样例输出:
1 2 3 4
解答:
一、普通冒泡
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
int n,i,j,k,exchange,band;
int a[101];
while(scanf("%d",&n)!=EOF){
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(j=0;j<n;j++){
for(k=0;k<n-j-1;k++){//内层每次减一
if(a[k]>a[k+1]){
int temp=a[k];
a[k]=a[k+1];
a[k+1]=temp;
}
}
}
for(i=0;i<n;i++){
printf("%d ",a[i]);
}
printf("\n");
}
return 0;
}
二、带标记的冒泡排序法。
使用变量band界定每一次排序后乱序的边界。使用变量exchange判断某次排序是否进行了交换。如果没有交换则说明该序列已经为顺序。
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
int n,i,j,k,exchange,band;
int a[101];
while(scanf("%d",&n)!=EOF){
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
band=n-1;//界定每一次排序后序列非顺序的最后一个位置
exchange=band;
while(exchange){//如果某一次交换了
exchange=0;
for(j=0;j<band;j++){
if(a[j]>a[j+1]){
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
k=j;
exchange=1;
}
}
band=k;
}
for(i=0;i<n;i++){
printf("%d ",a[i]);
}
printf("\n");
}
return 0;
}
三、使用sort函数。
记得要包含头文件
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
int main()
{
int n,i,j,k,exchange,band;
int a[101];
while(scanf("%d",&n)!=EOF){
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
sort(a,a+n);
for(i=0;i<n;i++){
printf("%d ",a[i]);
}
printf("\n");
}
return 0;
}