#include <stdio.h>
int main()
{
int nl[]={2,5,3,1,8};
int i,j;
printf("****************排序前********************\n") ;
for(i=0;i<5;i++)
{
if(i!=4)
printf("%d",nl[i]);
else
printf("%d",nl[i]);
}
for(i=5; i>=0; i--)
{
for(j=0;j<5;j++)
{
if(nl[j]>nl[j+1])
{
int temp;
temp=nl[i];
nl[i]=nl[i+1];
nl[i+1]=temp;
}
}
}
printf("****************排序后********************\n");
for(i=0;i<5;i++)
{
if(i!=4)
printf("%d",nl[i]);
else
printf("%d",nl[i]);
}
return 0;
}
这个哪有问题呢 排序不对
因为冒泡法的每一次排序实际上都是把最大(或最小)的一个排到最后(或最前),也就是所谓的升序降序。
所以外层循环用于控制冒泡后剩下数的个数,比如八个数我们排了最大的放在了后面,第二次就在前七个数里面排出最大的,依次这样到最后一个数。而内层循环则是用来给相领两个数做比较的,本题是把大的数放在后面。当我们排了一个最大数后,第二次排剩下的最大数就不再使用它了,因此内层循环的次数是不是应该小于等于外层循环的剩下的待排序的数的个数呢?在代码中也就是 j<=i;了。
第一个for循环里i=5,改为i=3,
往下看,
把j<5改为j<=i,
再接着往下看,
temp=nl[i];
nl[i]=nl[i+1];
nl[i+1]=temp;
改为
temp=nl[j];
nl[i]=nl[j+1];
nl[j+1]=temp;
给个最佳答案行不行呢~