冒泡排序中的交换操作数

时间:2015-04-06 15:30:51

标签: sorting

我试图解决这个问题:

给定一个没有重复项的整数列表,找出使用冒泡排序按递增顺序对列表进行排序所需的交换次数。

输入: 每个测试用例的第一行将包含一个整数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;
}

它在第一个和最后一个测试用例中给出正确的输出,但在第二个测试用例中没有

请指出错误。

1 个答案:

答案 0 :(得分:2)

在while循环内将count重新初始化为0。在您的代码中,count的值将被转移到所有测试用例。

在开始获取输入数字之前,还要在while循环中初始化i=0