En este artículo, discutiremos la diferencia entre la ordenación por inserción y la ordenación por selección:
La clasificación por inserción es un algoritmo de clasificación simple que funciona de manera similar a la forma en que clasifica las cartas en sus manos. La array se divide virtualmente en una parte ordenada y otra no ordenada. Los valores de la parte no ordenada se seleccionan y colocan en la posición correcta en la parte ordenada.
Algoritmo:
para ordenar una array de tamaño n en orden ascendente:
- Iterar de arr[1] a arr[n] sobre la array.
- Compare el elemento actual (clave) con su predecesor.
- Si el elemento clave es más pequeño que su predecesor, compárelo con los elementos anteriores. Mueva los elementos más grandes una posición hacia arriba para hacer espacio para el elemento intercambiado.
A continuación se muestra la imagen para ilustrar la ordenación por inserción:
A continuación se muestra el programa para el mismo:
C++
// C++ program for the insertion sort #include <bits/stdc++.h> using namespace std; // Function to sort an array using // insertion sort void insertionSort(int arr[], int n) { int i, key, j; for (i = 1; i < n; i++) { key = arr[i]; j = i - 1; // Move elements of arr[0..i-1], // that are greater than key to // one position ahead of their // current position while (j >= 0 && arr[j] > key) { arr[j + 1] = arr[j]; j = j - 1; } arr[j + 1] = key; } } // Function to print an array of size N void printArray(int arr[], int n) { int i; // Print the array for (i = 0; i < n; i++) { cout << arr[i] << " "; } cout << endl; } // Driver Code int main() { int arr[] = { 12, 11, 13, 5, 6 }; int N = sizeof(arr) / sizeof(arr[0]); // Function Call insertionSort(arr, N); printArray(arr, N); return 0; }
Java
// Java program for the above approach import java.util.*; class GFG { // Function to sort an array using // insertion sort static void insertionSort(int arr[], int n) { int i, key, j; for (i = 1; i < n; i++) { key = arr[i]; j = i - 1; // Move elements of arr[0..i-1], // that are greater than key to // one position ahead of their // current position while (j >= 0 && arr[j] > key) { arr[j + 1] = arr[j]; j = j - 1; } arr[j + 1] = key; } } // Function to print an array of size N static void printArray(int arr[], int n) { int i; // Print the array for (i = 0; i < n; i++) { System.out.print(arr[i] + " "); } System.out.println(); } // Driver code public static void main(String[] args) { int arr[] = { 12, 11, 13, 5, 6 }; int N = arr.length; // Function Call insertionSort(arr, N); printArray(arr, N); } } // This code is contributed by code_hunt.
Python3
# Python 3 program for the insertion sort # Function to sort an array using # insertion sort def insertionSort(arr, n): i = 0 key = 0 j = 0 for i in range(1,n,1): key = arr[i] j = i - 1 # Move elements of arr[0..i-1], # that are greater than key to # one position ahead of their # current position while (j >= 0 and arr[j] > key): arr[j + 1] = arr[j] j = j - 1 arr[j + 1] = key # Function to print an array of size N def printArray(arr, n): i = 0 # Print the array for i in range(n): print(arr[i],end = " ") print("\n",end = "") # Driver Code if __name__ == '__main__': arr = [12, 11, 13, 5, 6] N = len(arr) # Function Call insertionSort(arr, N) printArray(arr, N) # This code is contributed by bgangwar59.
C#
// C# program for the above approach using System; class GFG { // Function to sort an array using // insertion sort static void insertionSort(int[] arr, int n) { int i, key, j; for (i = 1; i < n; i++) { key = arr[i]; j = i - 1; // Move elements of arr[0..i-1], // that are greater than key to // one position ahead of their // current position while (j >= 0 && arr[j] > key) { arr[j + 1] = arr[j]; j = j - 1; } arr[j + 1] = key; } } // Function to print an array of size N static void printArray(int[] arr, int n) { int i; // Print the array for (i = 0; i < n; i++) { Console.Write(arr[i] + " "); } Console.WriteLine(); } // Driver code static public void Main() { int[] arr = new int[] { 12, 11, 13, 5, 6 }; int N = arr.Length; // Function Call insertionSort(arr, N); printArray(arr, N); } } // This code is contributed by Dharanendra L V
Javascript
<script> // JavaScript program for the above approach // Function to sort an array using // insertion sort function insertionSort(arr,n) { let i, key, j; for (i = 1; i < n; i++) { key = arr[i]; j = i - 1; // Move elements of arr[0..i-1], // that are greater than key to // one position ahead of their // current position while (j >= 0 && arr[j] > key) { arr[j + 1] = arr[j]; j = j - 1; } arr[j + 1] = key; } } // Function to print an array of size N function printArray(arr,n) { let i; // Print the array for (i = 0; i < n; i++) { document.write(arr[i] + " "); } document.write("<br>"); } // Driver code let arr=[12, 11, 13, 5, 6]; let N = arr.length; // Function Call insertionSort(arr, N); printArray(arr, N); // This code is contributed by avanitrachhadiya2155 </script>
5 6 11 12 13
El algoritmo de ordenación por selección ordena una array encontrando repetidamente el elemento mínimo (considerando el orden ascendente) de la parte no ordenada y colocándolo al principio. El algoritmo mantiene dos subarreglos en un arreglo dado.
- El subarreglo ya está ordenado.
- El subarreglo restante no está ordenado.
En cada iteración del ordenamiento por selección, el elemento mínimo (considerando el orden ascendente) del subarreglo no ordenado se selecciona y se mueve al subarreglo ordenado.
A continuación se muestra un ejemplo para explicar los pasos anteriores:
arr[] = 64 25 12 22 11 // Find the minimum element in arr[0...4] // and place it at beginning 11 25 12 22 64 // Find the minimum element in arr[1...4] // and place it at beginning of arr[1...4] 11 12 25 22 64 // Find the minimum element in arr[2...4] // and place it at beginning of arr[2...4] 11 12 22 25 64 // Find the minimum element in arr[3...4] // and place it at beginning of arr[3...4] 11 12 22 25 64
A continuación se muestra el programa para el mismo:
C++
// C++ program for implementation of // selection sort #include <bits/stdc++.h> using namespace std; // Function to swap two number void swap(int* xp, int* yp) { int temp = *xp; *xp = *yp; *yp = temp; } // Function to implement the selection // sort void selectionSort(int arr[], int n) { int i, j, min_idx; // One by one move boundary of // unsorted subarray for (i = 0; i < n - 1; i++) { // Find the minimum element // in unsorted array min_idx = i; for (j = i + 1; j < n; j++) if (arr[j] < arr[min_idx]) min_idx = j; // Swap the found minimum element // with the first element swap(&arr[min_idx], &arr[i]); } } // Function to print an array void printArray(int arr[], int size) { int i; for (i = 0; i < size; i++) { cout << arr[i] << " "; } cout << endl; } // Driver Code int main() { int arr[] = { 64, 25, 12, 22, 11 }; int n = sizeof(arr) / sizeof(arr[0]); // Function Call selectionSort(arr, n); cout << "Sorted array: \n"; // Print the array printArray(arr, n); return 0; }
Java
// Java program for implementation of // selection sort import java.util.*; class GFG { // Function to implement the selection // sort static void selectionSort(int arr[], int n) { int i, j, min_idx; // One by one move boundary of // unsorted subarray for (i = 0; i < n - 1; i++) { // Find the minimum element // in unsorted array min_idx = i; for (j = i + 1; j < n; j++) if (arr[j] < arr[min_idx]) min_idx = j; // Swap the found minimum element // with the first element int temp = arr[min_idx]; arr[min_idx]= arr[i]; arr[i] = temp; } } // Function to print an array static void printArray(int arr[], int size) { int i; for (i = 0; i < size; i++) { System.out.print(arr[i]+ " "); } System.out.println(); } // Driver Code public static void main(String[] args) { int arr[] = { 64, 25, 12, 22, 11 }; int n = arr.length; // Function Call selectionSort(arr, n); System.out.print("Sorted array: \n"); // Print the array printArray(arr, n); } } // This code is contributed by aashish1995
Python3
# Python3 program for implementation of # selection sort # Function to implement the selection # sort def selectionSort(arr, n): # One by one move boundary of # unsorted subarray for i in range(n - 1): # Find the minimum element # in unsorted array min_idx = i for j in range(i + 1, n): if (arr[j] < arr[min_idx]): min_idx = j # Swap the found minimum element # with the first element arr[min_idx], arr[i] = arr[i], arr[min_idx] # Function to print an array def printArray(arr, size): for i in range(size): print(arr[i], end = " ") print() # Driver Code if __name__ == "__main__": arr = [64, 25, 12, 22, 11] n = len(arr) # Function Call selectionSort(arr, n) print("Sorted array: ") # Print the array printArray(arr, n) # This code is contributed by ukasp
C#
// C# program for implementation of // selection sort using System; public class GFG { // Function to implement the selection // sort static void selectionSort(int []arr, int n) { int i, j, min_idx; // One by one move boundary of // unsorted subarray for (i = 0; i < n - 1; i++) { // Find the minimum element // in unsorted array min_idx = i; for (j = i + 1; j < n; j++) if (arr[j] < arr[min_idx]) min_idx = j; // Swap the found minimum element // with the first element int temp = arr[min_idx]; arr[min_idx]= arr[i]; arr[i] = temp; } } // Function to print an array static void printArray(int []arr, int size) { int i; for (i = 0; i < size; i++) { Console.Write(arr[i]+ " "); } Console.WriteLine(); } // Driver Code public static void Main(String[] args) { int []arr = { 64, 25, 12, 22, 11 }; int n = arr.Length; // Function Call selectionSort(arr, n); Console.Write("Sorted array: \n"); // Print the array printArray(arr, n); } } // This code is contributed by gauravrajput1
Javascript
<script> // Javascript program for implementation of // selection sort // Function to implement the selection // sort function selectionSort(arr, n) { let i, j, min_idx; // One by one move boundary of // unsorted subarray for(i = 0; i < n - 1; i++) { // Find the minimum element // in unsorted array min_idx = i; for(j = i + 1; j < n; j++) if (arr[j] < arr[min_idx]) min_idx = j; // Swap the found minimum element // with the first element let temp = arr[min_idx]; arr[min_idx]= arr[i]; arr[i] = temp; } } // Function to print an array function printArray(arr, size) { let i; for(i = 0; i < size; i++) { document.write(arr[i] + " "); } document.write("<br>"); } // Driver Code let arr = [ 64, 25, 12, 22, 11 ]; let n = arr.length; // Function Call selectionSort(arr, n); document.write("Sorted array: <br>"); // Print the array printArray(arr, n); // This code is contributed by rag2127 </script>
Sorted array: 11 12 22 25 64
Diferencia tabular entre la ordenación por inserción y la ordenación por selección:
|
Tipo de inserción | Clasificación de selección |
---|---|---|
1. | Inserta el valor en la array preordenada para ordenar el conjunto de valores en la array. | Encuentra el número mínimo/máximo de la lista y lo ordena en orden ascendente/descendente. |
2. | Es un algoritmo de clasificación estable. | Es un algoritmo de clasificación inestable. |
3. | La complejidad de tiempo en el mejor de los casos es Ω(N) cuando la array ya está en orden ascendente. Tiene Θ(N 2 ) en el peor de los casos y en el caso promedio. | Para el mejor de los casos, el peor de los casos y el tipo de selección promedio tienen una complejidad Θ(N 2 ). |
4. | El número de operaciones de comparación realizadas en este algoritmo de clasificación es menor que el intercambio realizado. | El número de operaciones de comparación realizadas en este algoritmo de clasificación es mayor que el intercambio realizado. |
5. | Es más eficiente que el tipo Selección. | Es menos eficiente que la ordenación por inserción. |
6. | Aquí se conoce el elemento de antemano, y buscamos la posición correcta para colocarlos. | La ubicación donde colocar el elemento se conoce previamente, buscamos el elemento para insertar en esa posición. |
7. |
El ordenamiento por inserción se utiliza cuando:
|
El ordenamiento por selección se utiliza cuando
|
8. | La ordenación por inserción es adaptativa, es decir, eficiente para conjuntos de datos que ya están sustancialmente ordenados: la complejidad del tiempo es O(kn) cuando cada elemento en la entrada no está a más de k lugares de distancia de su posición ordenada | La clasificación por selección es un algoritmo de clasificación de comparación en el lugar |