题目描述
输入n个数字,使用冒泡排序对其进行升序排序。
输入
测试次数T
每组测试数据格式为:数字个数n,后跟n个数字。假设n<20。
输出
对每组测试数据,输出冒泡排序的每趟排序结果
样例输入
2
5 10 4 43 1 2
10 20 123 12 2 434 54 2 45 23 -10
样例输出
4 10 1 2 43
4 1 2 10 43
1 2 4 10 43
1 2 4 10 43
20 12 2 123 54 2 45 23 -10 434
12 2 20 54 2 45 23 -10 123 434
2 12 20 2 45 23 -10 54 123 434
2 12 2 20 23 -10 45 54 123 434
2 2 12 20 -10 23 45 54 123 434
2 2 12 -10 20 23 45 54 123 434
2 2 -10 12 20 23 45 54 123 434
2 -10 2 12 20 23 45 54 123 434
-10 2 2 12 20 23 45 54 123 434
思路:主要还是基本的冒泡排序算法,输出每趟排序的结果是在算法外层n-1次for循环里面的,输出本躺排序结果后要换行。
#include <stdio.h>
#include<stdlib.h>
int main()
{
int t;
scanf_s("%d", &t);
while (t--)
{
int i, j, n, temp;
int *a;
scanf_s("%d", &n);
a = (int*)calloc(n, sizeof(int));
for (i = 0; i < n; i++)
{
scanf_s("%d", &a[i]);
}
for (i = 0; i < n - 1; i++)//进行n-1次循环(n为数组的大小)
{
for (j = 0; j < n - i - 1; j++)//每次进行n-1-i次的循环,因为每进行一次就有该次排序最大的数沉到下面
{
if (a[j] > a[j + 1])//相邻的两个数比较
{
temp = a[j + 1];
a[j + 1] = a[j];
a[j] = temp;
}
}
for (j = 0; j < n; j++)
{
if (j != n - 1)
printf("%d ", a[j]);
else
printf("%d\n", a[j]);//注意每组的最后一个数要换行
}
}
}
return 0;
}