C语言,简单冒泡排序排10个整数,分别按照升序降序输出,请问怎么实现?

毕设客栈 论文问答 1

C语言,简单冒泡排序排10个整数,分别按照升序降序输出,请问怎么实现?

回复

共2条回复 我来回复
  • 毕设工厂
    这个人很懒,什么都没有留下~
    评论
     void foo(int * data, int n, int desc)
    {
        for (int i = 0; i < n - 1; i++)
        {
            for (int j = 0; j < n - i; j++)
            {
    
                    if ((data[j + 1] < data[j] && desc) || (data[j + 1] > data[j] && !desc))
                    {
                        int t = data[j + 1];
                        data[j + 1] = data[j];
                        data[j] = t;
                    }
    
            }
        }
    }
    
    int main()
    {
        int data[] = { 3, 2, 3, 4, 1, 9, 5, 2, 6, 8 };
        for (int i = 0; i < 10; i++)
            printf("%d ", data[i]);
        printf("\n");
        foo(data, 10, 0);
        for (int i = 0; i < 10; i++)
            printf("%d ", data[i]);
        printf("\n");
        foo(data, 10, 1);
        for (int i = 0; i < 10; i++)
            printf("%d ", data[i]);
        printf("\n");
    }
    
    0条评论
  • 毕设助手
    这个人很懒,什么都没有留下~
    评论

    其中心思想是从左或从右两个两个交换,直到找到最大的或最小的放在首端或末端(内循环),对剩下的元素循环如此(外循环)。

    因为每遍历一遍都找到一个确定的值最大值或最小值,需要排序的数组元素就少一个。

    所以一个指针(下标)指向最后一个元素,外循环每循环一次就一个元素。从后面开始遍历。内循环则是还没排序的元素。

    #include
    
    int main()
    {
    int a[10]={5,999,9,13,44,55,3,0,1,2};
    
    int tmp=0;
    int i,j;
    for(j=9;j>=0;j--)
    {
        for(i=0;i<=(j-1);i++)
            if(a[i]>a[i+1])
            {
                tmp=a[i];
                a[i]=a[i+1];
                a[i+1]=tmp;
            }
    }
    for(i=0;i<10;i++)
    printf("%d ",a[i]);
    printf("\n");
    return 0;
    }
    

    这是从小到大,从大到小只是将if里的条件改一改。

    0条评论

发表回复

登录后才能评论