Это правильный способ сделать пузырьковую сортировку? - PullRequest
0 голосов
/ 13 июня 2018

просто интересно, является ли это правильным способом выполнения алгоритма Bubble Sort.Я нашел это в интернете как способ сортировки по пузырям, но я не получил логику этого алгоритма, это алгоритм с веб-сайта:

    int n = arr.length;  
    int temp = 0;  
     for(int i=0; i < n; i++)
           {  
             for(int j=1; j < (n-i); j++)
                 {  
                      if(arr[j-1] > arr[j])
                        {  
                             //swap elements  
                             temp = arr[j-1];  
                             arr[j-1] = arr[j];  
                             arr[j] = temp;  
                        }  

             }  

Я понимаю, что вам нужны вложенные циклы в Bubblesortоднако, часть, которую я не понимаю, это то, почему вам нужно

for(int j=1; j < (n-i); j++){  
    if(arr[j-1] > arr[j]) 

Зачем нужен "n минус 1" или "j минус 1", разве вы не можете просто получить два точных цикла for, например * 1007?* и for(int j=0; j < n; j++) как вложенный цикл?Кто-нибудь может дать мне визуальное объяснение термина непрофессионала, почему это так.

Следовательно, я разработал алгоритм сортировки по пузырям с двумя точно такими же вложенными циклами.Но я не знаю, все ли в порядке.Вот код:

   import java.lang.Math; // headers MUST be above the first class
   import java.util.Arrays;

   // one class needs to have a main() method
   public class HelloWorld
   {
     // arguments are passed using the text field below this editor
     public static void main(String[] args)
     {


         int integerArray [] = {4,6,1,3,2,8,678,122,12,29,57, -1};
     int temporaryValue;


     for (int i = 0; i < 11; i++)  // integerArray.lenght
     {
       for(int j = 0; j<11; j++)
       {
         if (integerArray [j] > integerArray [j+1])
             {temporaryValue = integerArray[j];
              integerArray [j] = integerArray [j+1];
              integerArray [j+1] = temporaryValue;
             }
       }
     }



   for (int j = 0; j < integerArray.length; j++)
     {
       System.out.print(integerArray[j]+",");


     }

 }
}

1 Ответ

0 голосов
/ 13 июня 2018

Вам нужно (n -i), потому что после каждого прохода вы знаете, что величайший элемент находится в правильном положении [конец].Таким образом, вам не нужно выполнять никаких операций подкачки для этого величайшего элемента. Это просто уменьшает количество операций подкачки.

Вам не нужно (j -1).В примере выполняется итерация j из индекса 1 в (n - i) [исключено], а в итерации j выполняется из индекса 0 в (integerArray.length - 1) [исключено]

Предложение. Возьмите ручку и бумагу и выполнитеваш алгоритм.Вы сможете понять, зачем нам нужно (n -i)

...