冒泡排序(数组)

题目描述

输入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;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值