如何在冒泡排序中提高最佳案例效率? (输入已经排序)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在冒泡排序中提高最佳案例效率? (输入已经排序)相关的知识,希望对你有一定的参考价值。

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

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'确定在特定迭代中是否发生了任何交换,如果没有发生交换,则给定数组进行排序,不再需要迭代。

答案

正如我在评论中提到的,您的代码似乎是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 []的大小。

另一答案

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

以上是关于如何在冒泡排序中提高最佳案例效率? (输入已经排序)的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript BubbleSort,如何提高效率?

Java如何重复排序直到在冒泡排序中没有进行交换?

排序(上):冒泡排序插入排序和选择排序

插入排序比冒泡排序好?

c语言如何实现-数组排序,二分查找

排序算法-----冒泡排序