Количество сравнений в пузырьковой сортировке - PullRequest
0 голосов
/ 28 апреля 2018

Я пытаюсь создать метод для сравнения в своем классе пузырьковой сортировки. Тем не менее, я продолжаю получать одно и то же значение. Есть ли способ это исправить? Спасибо.

public void comparisons(int[] array)
{
int count = 0;
for (int i = 0; i < array.length - 1; i++)
{
 for (int j = 0; j < array.length - i - 1; j++)
 {
   count++;
   if ((array[i] > array[i + 1])) //Swaps the elements
   {
     int temp = array[i]; 
     array[i] = array[i + 1];
     array[i + 1] = temp;
   }
 } 
}
System.out.print("\n\nComparisons:" + count);
}

Ответы [ 3 ]

0 голосов
/ 28 апреля 2018

Индекс внутреннего цикла j не используется и имеет неправильные границы.

public void comparisons(int[] array)
{
int count = 0;
for (int i = 0; i < array.length - 1; i++)
{
 for (int j = i; j < array.length - 1; j++)
 {
   count++;
   if ((array[j] > array[j + 1])) //Swaps the elements
   {
     int temp = array[j]; 
     array[j] = array[j + 1];
     array[j + 1] = temp;
   }
 } 
}
System.out.print("\n\nComparisons:" + count);
}
0 голосов
/ 28 апреля 2018

Попробуйте это:

public void comparisons(int[] array)
{
int count = 0;
for (int i = 0; i < array.length - 1; i++)
{
 for (int j = 0; j < array.length - i - 1; j++)
 {
   if ((array[i] > array[i + 1])) //Swaps the elements
   {
     int temp = array[i]; 
     array[i] = array[i + 1];
     array[i + 1] = temp;
     count++;
   }
 } 
}
System.out.print("\n\nComparisons:" + count);
}

Вам лучше попытаться увеличить значение count внутри условия if. Вы можете разместить count++ в любом месте внутри if-условия, основываясь на требованиях.

0 голосов
/ 28 апреля 2018

Индекс внешнего цикла i является одинаковым значением для всех значений j во внутреннем цикле. Похоже, логика сравнения должна использовать индекс внутреннего цикла j .

Если считается, что count записывает количество свопов, выполненных во время сортировки, возможно, он должен находиться в блоке кода, выполняющем своп. В данный момент count ++ всегда будет выполняться одинаковое количество раз.

...