#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;
}