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

时间:2019-04-21 12:17:17

标签: c sorting

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

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”确定是否在交换中发生了任何交换 特定的迭代,如果未发生交换,则对给定的数组进行排序,并且没有 需要更多迭代。

2 个答案:

答案 0 :(得分:0)

正如我在评论中提到的那样,您的代码似乎是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]);

更新:如评论中提到的@Weather Vane,请确保您初始化了数组,并使数组的长度位于同一函数内,以使sizeof函数正常工作。如果将数组传递给函数,则无法使用sizeof来获取其长度,因为该长度仅具有指针int *的大小,而不是数组int []的大小。

答案 1 :(得分:0)

@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;**
          }
      }
  }