听说过冒泡排序么?一种很暴力的排序方法。今天我们不希望你用它来排序,而是希望你能算出从小到大冒泡排序的过程中一共进行了多少次数据交换。
输入格式:
输入数据的第一行为一个正整数 T ,表示有 T 组测试数据。
接下来T行,每行第一个整数N, 然后有N个整数,无序。0<N <= 100
输出格式:
输出共 T 行。
每行一个整数,代表本行数据从小到大冒泡排序所进行的交换次数
输入样例:
在这里给出一组输入。例如:
3
5 1 2 3 4 5
4 5 3 7 1
2 2 1
输出样例:
在这里给出相应的输出。例如:
0
4
1
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
思路
本题重点在于冒泡排序的使用。
代码
#include <stdio.h>
int main()
{
int T, n, a[100], i, j, k, count, t;
scanf("%d", &T);
for (i = 0; i < T; i++) // 进行 T 次测试
{
count = 0; // 初始化数据交换次数
scanf("%d", &n); // 输入待排序序列长度
for (j = 0; j < n; j++) // 输入待排序序列元素
{
scanf("%d", &a[j]);
}
for (j = 0; j < n - 1; j++) // 数据冒泡排序
{
for (k = 0; k < n - j - 1; k++)
{
if (a[k] > a[k + 1])
{
t = a[k]; // 交换相邻两个元素的位置
a[k] = a[k + 1];
a[k + 1] = t;
count++; // 记录交换次数
}
}
}
printf("%d\n", count); // 输出每次排序后的交换次数
}
return 0;
}