排序總排不對
#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;
}
? ?這個哪有問題呢 ?排序不對
2018-07-05
因為冒泡法的每一次排序實際上都是把最大(或最小)的一個排到最后(或最前),也就是所謂的升序降序。
所以外層循環用于控制冒泡后剩下數的個數,比如八個數我們排了最大的放在了后面,第二次就在前七個數里面排出最大的,依次這樣到最后一個數。而內層循環則是用來給相領兩個數做比較的,本題是把大的數放在后面。當我們排了一個最大數后,第二次排剩下的最大數就不再使用它了,因此內層循環的次數是不是應該小于等于外層循環的剩下的待排序的數的個數呢?在代碼中也就是 j<=i;了。
2018-06-22
第一個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;
給個最佳答案行不行呢~