Это сортировка по выбору или пузырьковая сортировка?

#java

Вопрос:

Это сортировка по выбору? Я думаю, что это пузырьковая сортировка, потому что я использую (точечный) compareTo. Я смотрю на разные источники в Интернете, чтобы я мог их создать. Вот коды.

 import java.util.Arrays;

public class SelectionSort {
    public static void main(String args[]) {
        String[] row = {"apple", "orange", "banana", "grapes", "mango", "avocado"};
        int min  = row.length;
        for(int m = 0; m < min-1; m  ) {
            for (int n = m 1; n < row.length; n  ) {
                if(row[m].compareTo(row[n]) > 0){
                    String bar = row[m];
                    row[m] = row[n];
                    row[n] = bar;
                }
            }
        }
        System.out.println("Expected Outcome: "   Arrays.toString(row));
    }
}
 

Комментарии:

1. Каждый метод сортировки будет использовать сравнение в данный момент, compareTo не дает никакой подсказки

Ответ №1:

это не сортировка по выбору I сортировка по выбору на каждой итерации вы находите минимальное значение и помещаете его в нужное место. Посмотрите на эту картинку
введите описание изображения здесь

Простая реализация показана здесь: https://www.javatpoint.com/selection-sort-in-java

 public class SelectionSortExample {  
    public static void selectionSort(int[] arr){  
        for (int i = 0; i < arr.length - 1; i  )  
        {  
            int index = i;  
            for (int j = i   1; j < arr.length; j  ){  
                if (arr[j] < arr[index]){  
                    index = j;//searching for lowest index  
                }  
            }  
            int smallerNumber = arr[index];   
            arr[index] = arr[i];  
            arr[i] = smallerNumber;  
        }  
    }  
       
    public static void main(String a[]){  
        int[] arr1 = {9,14,3,2,43,11,58,22};  
        System.out.println("Before Selection Sort");  
        for(int i:arr1){  
            System.out.print(i " ");  
        }  
        System.out.println();  
          
        selectionSort(arr1);//sorting array using selection sort  
         
        System.out.println("After Selection Sort");  
        for(int i:arr1){  
            System.out.print(i " ");  
        }  
    }  
}  
 

Ответ №2:

Это не сортировка по выбору (Милад уже ответил на это), но это также не пузырьковая сортировка.

Способ определить, что это не пузырьковая сортировка, заключается в том, что пузырьковая сортировка сравнивает пары элементов, которые находятся рядом друг с другом (например: сравнивает элементы с индексом 0-1, 1-2, 2-3 … и при необходимости меняет местами). В вашем коде, когда m = 0, внутренний цикл будет сравнивать элемент с индексом 0 со всеми остальными элементами в массиве.

Пузырьковая сортировка в Java:

 public void sort( int[] array) {

    boolean isSorted;
    for (var i = 0; i < array.length; i  ) { 
        isSorted = true;
        for (var j = 1;  j < array.length - i ; j  ) 
            if (array[j] < array[j - 1]) {           
                swap(array, j, j - 1);
                isSorted = false;
            }
        if (isSorted)  
            return;
    }
}


private void swap(int[] array, int index1, int index2) {
    var temp = array[index1];
    array[index1] = array[index2];
    array[index2] = temp;
}