我试图解决这个问题:
给定一个没有重复项的整数列表,找出使用冒泡排序按递增顺序对列表进行排序所需的交换次数。
输入: 每个测试用例的第一行将包含一个整数T =测试用例的数量。每个测试用例将包含两行。第一行将包含数字N =否。列表中的元素。下一行将包含N个空格分隔的数字。 1< = N< = 50。
输出: 对于每个测试用例,在单行上打印,使用冒泡排序按升序对列表进行排序所需的交换次数。
测试用例:
3
5
2 1 4 6 3
10
123 21 34 45 25 675 23 44 55 900
1
23
输出: 3 16 0
我的代码:
#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("%d\n",count);
}
return 0;
}
它在第一个和最后一个测试用例中给出正确的输出,但在第二个测试用例中没有
请指出错误。
答案 0 :(得分:2)
在while循环内将count重新初始化为0。在您的代码中,count的值将被转移到所有测试用例。
在开始获取输入数字之前,还要在while循环中初始化i=0
。