Как улучшить эффективность кейса в пузырьковой сортировке?(Вход уже отсортирован) - PullRequest
1 голос
/ 21 апреля 2019

Я пробовал это, но я не мог понять ошибку ...

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 голосов
/ 21 апреля 2019

@ 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;**
          }
      }
  }
0 голосов
/ 21 апреля 2019

Как я уже упоминал в комментарии, ваш код кажется Java-кодом, а не C. С и синтаксис Java очень похожи, но есть некоторые различия.Во-первых, C по умолчанию не имеет логического типа, и вы должны включить заголовок stdbool.h, как упомянуто @Weather Vane.Убедитесь, что вы изменили тип boolean на bool для соответствия синтаксису C:

bool swapped = true;

Другое дело, что массив C не имеет свойства length, как в массиве Java.Вы можете получить длину массива в C, используя функцию sizeof вместо:

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

Обновление: Как упомянуто в комментарии @Weather Vane, убедитесь, что вы инициализировали массив и получилиего длина внутри той же функции для правильной работы функции sizeof.Если вы передадите массив в функцию, вы не сможете получить его длину, используя sizeof, потому что он будет иметь только размер указателя int * вместо массива int [].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...