C语言 如何提高气泡分拣的最佳案例效率?(输入已排序)



我已经尝试过了,但我无法理解错误...

boolean swapped = true;
for(int j=arr.length-1; j>=0 && swapped; j--)
{
    swapped = false;
    for(int k=0; k<j; k++)
    {
        if(arr[k] > arr[k+1])
        {
            int temp = arr[k];
            arr[k] = arr[k+1];
            arr[k+1] = temp;
        }
    }
}
布尔

变量"交换"确定在特定的迭代,如果没有发生交换,则给定的数组被排序并且没有需要更多迭代。

正如我在评论中提到的,你的代码似乎是Java代码而不是C.C和Java语法非常相似,但有一些差异。一个是 C 默认情况下没有布尔类型,您必须包含 @Weather Vane 提到的标头stdbool.h。确保将boolean类型更改为 bool 以符合 C 语法:

bool swapped = true;

另一件事是 C 数组不像 Java 数组那样具有属性length。您可以使用函数 sizeof 获取 C 格式的数组长度:

size_t arr_length =  sizeof(arr)/sizeof(arr[0]);

更新:正如 Vane 在注释中提到的@Weather,请确保初始化数组并在同一函数内获取其长度,以使sizeof函数正常工作。如果将数组传递到函数中,则无法使用sizeof获取其长度,因为它只有指针int *的大小,而不是数组int []

@WeatherVane评论框中给出了这个答案......

在这里,我提供代码---

boolean swapped = true;
for(int j=arr.length-1; j>=0 && swapped; j--)
   {
     swapped = false;
     for(int k=0; k<j; k++)
       {
        if(arr[k] > arr[k+1])
           {
            int temp = arr[k];
            arr[k] = arr[k+1];
            arr[k+1] = temp;
            **swapped = true;**
          }
      }
  }

最新更新