冒泡排序中数据交换的次数
Time Limit: 1000MS Memory limit: 65536K
题目描述
听说过冒泡排序么?很好玩很暴力的一种排序方式,但对于小数据也是很实用的哦。今天我们不希望你用它来排序,而是希望你能算出从小到大冒泡排序的过程中一共进行了多少次数据交换。
输入
输入数据的第一行为一个正整数 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
提示
来源
示例程序#include <stdio.h>
#include <stdlib.h>
int main()
{
int i , t , j , k , n , a[101] , count ;
scanf("%d", &t);
for(j = 1 ; j <= t ; j++)
{
count = 0 ;
scanf("%d", &n);
for(i = 0 ; i< n ; i++)
scanf("%d", &a[i]);
for(i = 0 ; i < n ; i++)
{
for(k = 0 ; k < n - i -1 ; k++)
{
if(a[k] > a[k+1])
{
int b ;
b = a[k] ; a[k] = a[k+1] ; a[k+1] = b ;
count++;
}
}
}
printf("%d\n", count);
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i , t , j , k , n , a[101] , count ;
scanf("%d", &t);
for(j = 1 ; j <= t ; j++)
{
count = 0 ;
scanf("%d", &n);
for(i = 0 ; i< n ; i++)
scanf("%d", &a[i]);
for(i = 0 ; i < n ; i++)
{
for(k = 0 ; k < n - i -1 ; k++)
{
if(a[k] > a[k+1])
{
int b ;
b = a[k] ; a[k] = a[k+1] ; a[k+1] = b ;
count++;
}
}
}
printf("%d\n", count);
}
return 0;
}