C 反向气泡排序(左边最大)似乎不起作用

C 反向气泡排序(左边最大)似乎不起作用,c,reverse,bubble-sort,C,Reverse,Bubble Sort,我想用反向冒泡排序对12个整数进行排序,我们称之为溺水斧排序,随便什么。我的功能看起来不错,但出了点问题 错误:键入12个随机数后,我没有打印结果,相反,我的编译器停止并不再继续 有人能帮忙吗 代码: 您的数组int数组[11];没有做你认为是的事。它声明了一个包含11个整数的数组,索引范围为0到10(包括0到10)。没有数组[11],因此尝试访问该数组将导致未定义的行为 您已经获得了for循环的正确形式,它将正确地迭代数组的12个成员,编号为0到11,包括0到11。但是,您需要将数组声明为in

我想用反向冒泡排序对12个整数进行排序,我们称之为溺水斧排序,随便什么。我的功能看起来不错,但出了点问题

错误:键入12个随机数后,我没有打印结果,相反,我的编译器停止并不再继续

有人能帮忙吗

代码:

您的数组int数组[11];没有做你认为是的事。它声明了一个包含11个整数的数组,索引范围为0到10(包括0到10)。没有数组[11],因此尝试访问该数组将导致未定义的行为

您已经获得了for循环的正确形式,它将正确地迭代数组的12个成员,编号为0到11,包括0到11。但是,您需要将数组声明为int数组[12];让它足够大,可以工作

另外,使用&array[11]将数组传递给这两个函数。你只需要说array,它就会正确地传入数组。您所做的将导致这两个函数在随机内存中写入,这肯定不会有帮助


尝试修复这些问题,看看有什么变化。

我想您忘记在代码中包含stdio.h库了。

首先,为了使用printf和scanf,您应该包含stdio.h头文件

您正在处理12个整数。那你为什么要声明一个11个整数的数组

int array[11]; //declaring an integer array;  <-------- change the size to 12 from 11
您应该首先传递基本元素的地址。 你可以通过两种方式来做到这一点

 array_clean(&array[0]); 
 Or,
 array_clean(array);
当数组用作值时,其名称表示第一个元素的地址

最后,请检查冒泡排序逻辑

    for(int j=0; j<12; j++)
            {
                if(a[j]<a[j+1])
                    {place=a[j]; //<-----curly braces missing in the body of if 
                    a[j] = a[j+1];  //<----error
                    a[j+1] = place;
                    }

            }

如果您的编译器停止并且不再继续运行,它将向您提供编译器错误,告诉您它停止的原因。为什么这些信息没有出现在你的帖子中?是什么让你认为你需要一个[i]=a[i]&&0?为什么不能只做一个[i]=0?@KenWhite很可能是一个术语错误。如果编译器停止,那么就不会有要执行的程序,从而无法输入数字。我怀疑他是说程序停止了,从各方面考虑,这是一个更可能的结果。@KenWhite我使用xcode。它表明:122334455667788990243546lldb和停止工作我建议在这个答案中添加你为什么这么想以及它将如何帮助提问者。这将是一个更完整的答案。
 array_clean(&array[0]); 
 Or,
 array_clean(array);
    for(int j=0; j<12; j++)
            {
                if(a[j]<a[j+1])
                    {place=a[j]; //<-----curly braces missing in the body of if 
                    a[j] = a[j+1];  //<----error
                    a[j+1] = place;
                    }

            }
#include<math.h>
#include<stdio.h> // <---------- include this header file 

void array_clean(int a[12]) //just an array cleaner
  {
       for(int i=0; i<12; i++)
    {
       a[i] = 0; // smth && 0 = 0 anyway
    }

  }

void axe_sort(int a[12]) //drowning-axe sort function
{
  int i,j;

    for(i=0; i<11; i++)
    {
        for(j=0; j<11-i; j++)  //<-------- see the logic carefully
        {
            if(a[j] < a[j+1])   //<-----put curly braces
                {int place=a[j];
                a[j] = a[j+1];
                a[j+1] = place;}
        }
    }

}

    int main(void)
     {
        int array[12]; //declaring an integer array;
        array_clean(&array[0]); // <---------------- pass the base address
        printf("Enter 12 random integers you'd like to sort: ");
        for(int m=0; m<12; m++)
        {
            scanf("%d", &array[m]); //letting user to fill an array
        }
         axe_sort(&array[0]); // <---------------- pass the base address
        for(int m=0; m<12; m++)
        {
            printf("%d ", array[m]); //printing the sorted array
        }

return 0;
}