我试图解决这个问题:
给定一个没有重复的整数列表,使用Bubble排序来找出按递增顺序对列表进行排序所需的交换次数。
输入:每个测试用例的第一行将包含一个整数T=测试用例的数量。每个测试用例将包含两行。第一行将包含一个数字N=列表中元素的数量。下一行将包含N个空格分隔的数字。1<=N<=50.
输出:对于每个测试用例,在单行上打印使用Bubble排序按递增顺序排序列表所需的交换数量。
测试用例:
3
5
2 1 4 6 3
10
123 21 34 45 25 675 23 44 55 900
1
23
输出:3.160
我的代码:
#include<stdio.h>
int main()
{
int testcase,num_elements,i=0,j,n,count=0,flag=0,temp;
int array[1000000];
scanf("%d",&testcase);
while(testcase--)
{
scanf("%d",&num_elements);
n=num_elements;
while(i<n && scanf("%d",&array[i])==1)
i++;
for(j=1;j<=n-1;j++)
{
flag=0;
for(i=0;i<=n-j-1;i++)
{
if(array[i]>array[i+1])
{
temp=array[i];
array[i]=array[i+1];
array[i+1]=temp;
flag=1;
count++;
}
}
if(flag==0)
{
break;
}
}
printf("%dn",count);
}
return 0;
}
它在第一个和最后一个测试用例中给出了正确的输出,但在第二个用例中没有。
请指出错误。
在while循环中将count重新初始化为0。在您的代码中,count的值被转移到所有的测试用例中。
在开始获取输入数字之前,还要在while循环中初始化i=0
。