修改后的冒泡排序错误

时间:2015-05-28 22:35:16

标签: c

编写一个C程序,对n个元素的数组执行冒泡排序。

注意:如果您发现列表在任何中间点排序,请停止该过程

它适用于其他数字,但是当我输入输入3,2,4,5,6时,它没有正确显示传球。而不是正确显示传球,它会为每次传球重复相同的值。

输入元素数量:

5

输入元素1

3

输入元素2

2

输入元素3

4

输入元素4

5

输入元素5

6

未排序的列表是:

3 2 4 5 6

传递1元素后:2 3 4 5 6

通过2后元素是:2 3 4 5 6

通过3后元素是:2 3 4 5 6

Pass 4元素后:2 3 4 5 6

排序列表是:

2 3 4 5 6

请帮我解决问题。

这是我的代码:

#include<stdio.h>
int main(){

int s,i,j,temp,a[20],count=0,x,n=0;
printf("Enter the number of elements :\n");
scanf("%d",&s);
for(i=0;i<s;i++)
{
    printf("Enter element %d\n",i+1);
    scanf("%d",&a[i]);
}
printf("Unsorted list is :\n");
for(i=0;i<s;i++)
{
    printf("%d ",a[i]);
}
for(i=0;i<(s-1);i++)
{
    n++;
    for(j=0;j<(s-i)-1;j++)
    {
        if(a[j]>a[j+1])
        {
            temp=a[j];
            a[j]=a[j+1];
            a[j+1]=temp;
            count++;
         }
    }
    if(count<0)
    {
        break;
    }
    else
    {
        printf("\nAfter Pass %d elements are :",n);
        for(x=0;x<s;x++)
        {
            printf("%d ",a[x]);
        }
     }
   }
   printf("\nSorted list is :\n");
   for(i=0;i<s;i++)
       printf("%d ",a[i]);
  return 0;
}

2 个答案:

答案 0 :(得分:1)

您需要在循环开始时将count重置为0。当您交换元素时,它会递增,但除非您只计算此传递中的掉期,否则您永远不会跳过Mx+Ny=Z

答案 1 :(得分:0)

RewriteRule

- 我也被困在这个过程中。上述解决方案由@subin sv从此链接给出here。信用归他。通过使用标志来检查它是否已排序是主要逻辑。