冒泡排序中的交换操作数



我试图解决这个问题:

给定一个没有重复的整数列表,使用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

最新更新