编写一个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;
}
答案 0 :(得分:1)
您需要在循环开始时将count重置为0。当您交换元素时,它会递增,但除非您只计算此传递中的掉期,否则您永远不会跳过Mx+Ny=Z
。
答案 1 :(得分:0)
RewriteRule
- 我也被困在这个过程中。上述解决方案由@subin sv从此链接给出here。信用归他。通过使用标志来检查它是否已排序是主要逻辑。