【发布时间】:2015-05-28 22:35:15
【问题描述】:
编写一个 C 程序,对包含 n 个元素的数组执行冒泡排序。
注意:如果您发现列表在任何中间点排序,请停止该过程
它对其他数字正常工作,但是当我输入 3、2、4、5、6 时,它没有正确显示通行证。它没有正确显示通行证,而是对每个通行证重复相同的值。
输入元素数量:
5
输入元素 1
3
输入元素2
2
输入元素 3
4
输入元素 4
5
输入元素 5
6
未排序的列表是:
3 2 4 5 6
在 Pass 1 之后的元素是:2 3 4 5 6
在 Pass 2 之后的元素是:2 3 4 5 6
在 Pass 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;
}
【问题讨论】:
-
问题是第一遍排序它,然后它继续,好像它没有注意到一样。你写了一个 is_sorted() 来检查这个吗?
-
但最后我们可以得到排序列表,因为如果程序可以正确运行,那么它必须显示 2 遍,但它没有显示。
-
两个问题:(1)检查count是否
-
其实
count == 0,不能少。 (嗯,不应该) -
for(j=0;更改为for(j=count=0;和if(count<0)更改为if(count==0)
标签: c