用冒泡排序法从键盘输入10个整数后从小到大排序,程序运行后回车却无法进行排序

问题:想用冒泡排序法从键盘输入10个整数后从小到大排序,程序运行后回车却无法进行排序,想知道这是为什么
代码:

#include 
#include 

int main()
{
   int a[10];
   int i,j,t;
   for(j=1;j<9;j++)
    {scanf("%d",&a[i]);
    for(i=0;i<9-j;i++)
    {
        if(a[i]>a[i+1])
        {
            t=a[i];
            a[i]=a[i+1];
            a[i+1]=t;
        }
    }
    }
  for(i=0;i<10;i++)
    printf("%d ",a[i]);
    return 0;
}


  • 首先 输入数组元素,我建议你,先用一个循环输入,然后再去 进行 冒泡排序
  • 参考如下【如有帮助,欢迎点赞和采纳哈】:

#include<stdio.h>

// 从后往前冒泡
void sort(int a[],int n)
{
    int i,j,t,noswap;
    for(i=0;i< n-1; i++)
    {
        noswap=1;
        for(j=n-1;j>i;j--)
            if(a[j-1]>a[j])
            {
                t=a[j-1];
                a[j-1]=a[j];
                a[j]=t;
                noswap=0;
            }
        if(noswap)    
            break;
    }
}

// 从前往后冒泡
void sort1(int a[],int n)
{
    int i,j,t,noswap;
    for(i=0;i< n-1; i++)
    {
        noswap=1;
        for(j=0;j<n-1-i;j++)
            if(a[j+1]<a[j])
            {
                t=a[j+1];
                a[j+1]=a[j];
                a[j]=t;
                noswap=0;
            }
        if(noswap)  
            break;
    }
}

int main() 
{
     
    int n;
    printf("Input n:");
    scanf("%d", &n);
     
    printf("Input %d numbers:", n);

    int a[n];
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &a[i]);
    }

    sort1(a, n);

    printf("Sorting results:");
    for (int i = 0; i < n; i++) 
    {
        printf("%d ", a[i]);
    }

    return 0;
}

数组输入和排序得分开,修改如下,供参考:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int a[10] = {0};
    int i, j, t;
    for (j = 0; j < 10; j++)  // for(j=1;j<9;j++) 修改
    {
        scanf("%d", &a[j]);   // scanf("%d", &a[i]); 修改
    }                         // 修改 
    for (j = 0; j < 9; j++)   // 修改
    {
        for (i = 0; i < 9 - j; i++)
        {
            if (a[i] > a[i + 1])
            {
                t = a[i];
                a[i] = a[i + 1];
                a[i + 1] = t;
            }
        }
    }
    for (i = 0; i < 10; i++)
        printf("%d ", a[i]);
    return 0;
}

该回答引用GPTᴼᴾᴱᴺᴬᴵ
在这段代码中,for循环的循环变量i没有在外层循环中被初始化,这意味着在第一次内层循环中,程序将尝试访问未初始化的a[i]元素,这可能导致程序崩溃或产生意外行为。为了解决这个问题,可以将i的初始化移到外层循环中:

#include <stdio.h>
#include <stdlib.h>
 
int main()
{
   int a[10];
   int i,j,t;
   for(j=1;j<9;j++)
   {
       for(i=0;i<9-j;i++)
       {
           scanf("%d",&a[i]);
           if(a[i]>a[i+1])
           {
               t=a[i];
               a[i]=a[i+1];
               a[i+1]=t;
           }
       }
   }
   for(i=0;i<10;i++)
       printf("%d ",a[i]);
   return 0;
}


这样修改后,程序应该可以正确排序输入的整数。

若有帮助,望给个采纳哈,谢谢!

img


#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a[10];
    int i=0, j, t;

    // 先输入10个数字
    for (j = 0; j < 10; j++)
    {
        scanf_s("%d", &a[i++]);
    }

    // 再对10个数字进行排序
    for (i = 0; i < 10; i++)
    {
        for (j = i + 1; j < 10; j++)
        {
            if (a[i] > a[j])    // 升序排序
            {
                t = a[j];
                a[j] = a[i];
                a[i] = t;
            }

            /*if (a[i] < a[j])    // 降序排序
            {
                t = a[j];
                a[j] = a[i];
                a[i] = t;
            }*/
        }
    }

    // 输出排序后的数字
    for (i = 0; i < 10; i++)
        printf("%d ", a[i]);

    system("Pause");
    return 0;
}