任务描述
本关任务:编写程序实现冒泡排序。
相关知识
为了完成本关任务,要了解冒泡法排序的算法思想: 对所有相邻记录的关键字值进行比较,如果是逆序则将其交换,最终达到有序化,其处理过程为:
- 将整个待排序的记录序列划分成有序区和无序区,初始状态有序区为空,无序区包括所有待排序的记录。
- 对无序区从前向后依次将相邻记录的关键字进行比较,若逆序将其交换,从而使得关键字值小的记录向上“飘浮”(左移),关键字值大的记录好像石块,向下“堕落”(右移)。 每经过一趟冒泡排序,都使无序区中关键字值最大的记录进入有序区,对于由
n
个记录组成的记录序列,最多经过n-1
趟冒泡排序,就可以将这n
个记录重新按关键字顺序排列。
以长度为n=10
的序列(8 7 6 5 9 3 4 0 2 1)
的冒泡排序过程做示范: 第一趟:在经过9
次对所有相邻数据进行比较后,则数组中元素为(7 6 5 8 3 4 0 2 1 9)
; 第二趟:在经过8
次对所有相邻数据进行比较后,则数组中元素为(6 5 7 3 4 0 2 1 8 9)
; 第三趟:在经过7
次对所有相邻数据进行比较后,则数组中元素为(5 6 3 4 0 2 1 7 8 9)
; ……
以此类推,共执行9
趟操作,可将有n=10
个元素的数组排成有序序列(0 1 2 3 4 5 6 7 8 9)
。
编程要求
平台会对你编写的代码进行测试,对数组中的元素实现冒泡排序,并输出每一次排序后的结果。具体请参见后续测试样例。
测试说明
平台会对你编写的代码进行测试:
测试输入: 10
29 62 73 90 46 43 38 76 52 93
输入说明: 第一行为
n
,表示n
个整数。 第二行为n
个整数。
预期输出: 29 62 73 90 46 43 38 76 52 93
29 62 73 46 43 38 76 52 90 93
29 62 46 43 38 73 52 76 90 93
29 46 43 38 62 52 73 76 90 93
29 43 38 46 52 62 73 76 90 93
29 38 43 46 52 62 73 76 90 93
29 38 43 46 52 62 73 76 90 93
29 38 43 46 52 62 73 76 90 93
29 38 43 46 52 62 73 76 90 93
开始你的任务吧,祝你成功!
#include <stdio.h>
#include<stdlib.h>
#define N 100
int main ()
{
/********** Begin **********/
int a[N],n,i,j,k,t=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d ",&a[i]);
}
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
for(k=0;k<n;k++)
printf("%d ",a[k]);
printf("\n");
}
/********** End **********/
return 0;
}