自己的沉底法代码有bug


#include<stdio.h>           
#include<math.h>
int main()
{
    printf("请输入十个数\n");
    int a[10] = {9,8,7,6,5,4,3,2,1,0}, s, i, t, p;
//    for (i = 0; i <= 9; i++)
//        scanf_s("%d", &a[i]);

    printf("\n从小到大的排序为");
    for (t = 0; t <= 9; t++)
    {
        for (p=0;p<=8-t ; p++)
        {
            if (a[p]>a[p+1])
            {
                s = a[p];
                a[p] = a[p+1];
                a[p+1] = s;
            }

        }
        printf("%d\t", a[t]);
    }

    return 0;
}

这个是我写的沉底法
但是答案不对,求找出哪里错了

img

这里是第24行的循环有问题。
改完了是这样的:

 
#include<stdio.h>           
#include<math.h>
int main()
{
    printf("请输入十个数\n");
    int a[10] = {9,8,7,6,5,4,3,2,1,0}, s, i, t, p;
//    for (i = 0; i <= 9; i++)
//        scanf_s("%d", &a[i]);
 
    printf("\n从小到大的排序为");
    for (t = 0; t <= 9; t++)
    {
        for (p=0;p<=8-t ; p++)
        {
            if (a[p]>a[p+1])
            {
                s = a[p];
                a[p] = a[p+1];
                a[p+1] = s;
            }
 
        }
    }
    for(int t=0;t<=9;t++)
    {
        printf("%d\t", a[t]);
    }
    
    return 0;
}

应该把输出放到循环外面,再单起一个循环就行了。

修改如下,供参考:

#include<stdio.h>           
#include<math.h>
int main()
{
    printf("请输入十个数\n");
    int a[10] = { 9,8,7,6,5,4,3,2,1,0 }, s, i, t, p;
    //    for (i = 0; i <= 9; i++)
    //        scanf_s("%d", &a[i]);

    printf("\n从小到大的排序为:");
    for (t = 0; t < 10 - 1; t++)   //for (t = 0; t <= 9; t++)
    {
        for (p = 0; p < 10 - t - 1; p++)  //for (p = 0; p <= 8 - t; p++)
        {
            if (a[p] > a[p + 1])
            {
                s = a[p];
                a[p] = a[p + 1];
                a[p + 1] = s;
            }
        }
        //printf("%d\t", a[t]); //修改
    }
    for (i = 0; i < 10; i++)   //修改 
        printf("%d ", a[i]);
    return 0;
}

img


这里不对
正确代码:


 
#include<stdio.h>           
#include<math.h>
int main()
{
    printf("请输入十个数\n");
    int a[10] = {9,8,7,6,5,4,3,2,1,0}, s, i, t, p;
    printf("\n从小到大的排序为");
    for (t = 0; t <10; t++)
    {
        for (p=0;p<=8-t ; p++)
        {
            if (a[p]>a[p+1])
            {
                s = a[p];
                a[p] = a[p+1];
                a[p+1] = s;
            }
 
        }
    }
    for( t=0;t<10;t++)
    {
        printf("%d\t", a[t]);
    }
    
    return 0;
}