Selección Clasificación de una matriz Int -- java campo con beginner campo con sorting camp codereview Relacionados El problema

Selection sorting an int array


0
vote

problema

Español

Me gustaría mejorar este código de clasificación de selección

  package com.arun.sort;  import java.util.Arrays;  public class SelectionSort {      public static void main(String[] args) {          int[] arr = { 5, 2, 131, 13, 11, 1 };          SelectionSort sort = new SelectionSort();          sort.selectionSort(arr);          System.out.println(Arrays.toString(arr));      }      public int[] selectionSort(int[] a) {          int min;         for (int out = 0; out < a.length - 1; out++) {             min = out;             for (int in = out + 1; in < a.length; in++) {                 if (a[in] < a[min]) {                     min = in;                  }             }             int tempValue = a[out];             a[out] = a[min];             a[min] = tempValue;          }          return a;      }  }   
Original en ingles

I'd like to improve this selection sort code

package com.arun.sort;  import java.util.Arrays;  public class SelectionSort {      public static void main(String[] args) {          int[] arr = { 5, 2, 131, 13, 11, 1 };          SelectionSort sort = new SelectionSort();          sort.selectionSort(arr);          System.out.println(Arrays.toString(arr));      }      public int[] selectionSort(int[] a) {          int min;         for (int out = 0; out < a.length - 1; out++) {             min = out;             for (int in = out + 1; in < a.length; in++) {                 if (a[in] < a[min]) {                     min = in;                  }             }             int tempValue = a[out];             a[out] = a[min];             a[min] = tempValue;          }          return a;      }  } 
        

Lista de respuestas

2
 
vote
vote
La mejor respuesta
 

Pocos puntos.

No hay necesidad de crear un objeto para selección. Declararlo estático.

selección (ARR);

Se deben mejorar sus nombres de las variables. No se recomienda usar 'OUT' como variable, o int a []. Puede usar INT GUINRAR [], ya que es más descriptivo. Imagine que alguien está leyendo su código, entonces, si hace que su vida sea fácil, haciendo que su código sea más descriptivo, entonces el trabajo se realiza más rápido.

Puede crear un método de intercambio separado. Esto estructurará su código correctamente. Puede reutilizar el método de intercambio para otros métodos de clasificación también.

  if i == a:     indegrees[i].append((i, b))     indegrees[i].append((b, i)) 3  
 

Few points.

There is no need to create a object for SelectionSort. Declare it static.

selectionSort(arr);

Your variable names should be made better. Its not recommended to use 'out' as variable, or int a[]. You can use int inputArr[] as thats more descriptive. Imagine someone is reading your code then if you make their life easy by making your code more descriptive then job is done faster.

You can create a seperate swap method. This will structure your code properly. You can reuse the swap method for other sorting methods too.

private void swap(int out, int min) { int temp = a[out]; a[out] = a[min]; a[min] = temp; } 
 
 
 
 
1
 
vote

Creo que el método if i == a: indegrees[i].append((i, b)) indegrees[i].append((b, i)) 4 mejor sea un método estático porque el método no requiere ningún estado interno dentro de if i == a: indegrees[i].append((i, b)) indegrees[i].append((b, i)) 5 objeto, que es if i == a: indegrees[i].append((i, b)) indegrees[i].append((b, i)) 6 clase.

 

I think the selectionSort method better be a static method because the method does not require any internal state within sort object, which is SelectionSort class.

 
 
1
 
vote

¿No es el punto de selección para intercambiar el más pequeño? P.ej. Para la matriz [6, 2, 7, 5, 3, 1, 2, 9, 8] Con su última edición, tendría 36 comparaciones y 16 swaps,

  if i == a:     indegrees[i].append((i, b))     indegrees[i].append((b, i)) 7  

pero con

  if i == a:     indegrees[i].append((i, b))     indegrees[i].append((b, i)) 8  

produciría 36 comparaciones y 9 swaps

 

Isn't the point of selection sort to just swap the smallest? Eg. for the array [6, 2, 7, 5, 3, 1, 2, 9, 8] With your latest edit you would have 36 comparisons and 16 swaps,

public static void selectionSort(int[] arr) {     int size = arr.length;     for (int i = 0; i < size - 1; i++) {         int iMin = i;         for (int j = i + 1; j < size; j++) {             if (arr[j] < arr[iMin]) {                 swap(arr, j, iMin);             }         }     } } 

but with

for(int i = 0; i < input.length; i++){         iMin = i;         for(int j = i+1; j<input.length; j++ ){             comparisons++;             if(input[j] < input[iMin]){                 iMin = j;             }         }          swap(input,i,iMin);         swaps++;      } 

would yield 36 comparisons and 9 swaps

 
 
0
 
vote

He modificado mi código basado en las respuestas.

selectionsort.java

  if i == a:     indegrees[i].append((i, b))     indegrees[i].append((b, i)) 9  

complejidad de tiempo: $ o (n ^ 2) $

 

I've modified my code based on the answers.

SelectionSort.java

import java.util.Arrays;  public class SelectionSort {      public static void main(String[] args) {          int[] inputArray = { 7, 2, 6, 4, 9, 11, 19, 13 };         System.out.println("Before sorting " + Arrays.toString(inputArray));         selectionSort(inputArray);         System.out.println("After sorting " + Arrays.toString(inputArray));      }      public static void selectionSort(int[] arr) {         int size = arr.length;         for (int i = 0; i < size - 1; i++) {             int iMin = i;             for (int j = i + 1; j < size; j++) {                 if (arr[j] < arr[iMin]) {                     swap(arr, j, iMin);                 }             }         }     }      public static void swap(int[] arr, int j, int iMin) {         int temp = arr[j];         arr[j] = arr[iMin];         arr[iMin] = temp;     }  } 

Time complexity: \$O(n^2)\$

 
 

Relacionados problema

7  Merge Sort en JavaScript  ( Merge sort in javascript ) 
Implementé este tipo de fusión en JS y noté que para los números de enteros aleatorios es mucho más rápido que la construcción en funciones de tipo de todos l...

6  Fusionar la implementación de ordenación en Java  ( Merge sort implementation in java ) 
¿Puedes revisar mi implementación de tipo de fusión? De todas mis pruebas, parece que funciona, pero solo quería asegurarme de que lo estoy haciendo lo mejor ...

3  Diseño de MVC para recuperar, almacenar y presentar datos de una fuente externa  ( Mvc design to fetch store and present data from an external source ) 
Hace un par de semanas Una compañía me envió este desafío de codificación: Por favor escriba una aplicación web PHP y envíela a mí como archivo zip: que...

1  Python Bubble Sort  ( Python bubble sort ) 
a = [5, 2, 4, 6, 1, 3] def insert(arr): if len(arr) == 1: return arr # outer loop for i in range(1, len(arr)): # inner loop ...

6  Clasificación de números no repetidos aleatorios  ( Sorting random non repeating numbers ) 
Estoy trabajando en un programa en el que 10000 números no repetidos aleatorios se clasifican de forma selectiva en orden ascendente " Team | Another Team ...

9  Clasificación de visualizaciones - WinForms  ( Sorting visualizations winforms ) 
Descripción Creo que muchas personas han visto este video de Youtube "15 algoritmos de clasificación en 6 minutos" Cuando lo vi, decidí: "Puedo hacerlo m...

7  Insertar ordenar en una lista vinculada  ( Insert sort on a linked list ) 
Quiero hacer un orden de inserción en una lista vinculada sin usar los nodos ficticios. Este es mi código. ¿Cómo se puede mejorar esto? Se aprecia cualquier...

0  Función de clasificación personalizada implementada como un plugin jquery  ( Custom sorting function implemented as a jquery plugin ) 
Me pidieron que creara un complemento de jQuery que ordenara los elementos DOM homogéneos en un elemento de contenedor DOM dado. Se me ocurrió la idea de ad...

12  Intento de un algoritmo de clasificación  ( Attempt at a sorting algorithm ) 
He estado jugando y leyendo algunos algoritmos de clasificación, y he decidido intentar escribir mi propia. Resultó ser bastante rápido (en comparación con lo...

6  Clasificación de palabras por frecuencia  ( Sorting words by frequency ) 
Estoy haciendo una tarea simple en óxido después de leer el Libro de óxido : Lea un archivo de texto dividirlo en Whitespace desinfectar palabras elim...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos