Métodos de ordenamiento de datos
En C, existen varios métodos de ordenamiento para organizar los datos en arreglos o listas. Los algoritmos de ordenamiento se pueden clasificar en dos tipos principales: ordenamiento simple y ordenamiento eficiente. Aquí te explico algunos de los métodos más comunes, tanto sencillos como más avanzados.
---
Métodos de Ordenamiento Simples
Estos métodos son más fáciles de implementar, pero suelen ser menos eficientes para arreglos grandes.
1. Ordenamiento de Burbuja (Bubble Sort)
- Compara cada par de elementos adyacentes en el arreglo y los intercambia si están en el orden incorrecto.
- Este proceso se repite hasta que todo el arreglo esté ordenado.
- Complejidad: O(n²).
Ejemplo de código:
```c
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
// Intercambia arr[j] y arr[j + 1]
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
```
2. Ordenamiento por Selección (Selection Sort)
- Busca el elemento más pequeño (o más grande) en el arreglo y lo coloca en su posición correcta.
- Este proceso se repite para cada posición en el arreglo.
- Complejidad: O(n²).
Ejemplo de código:
```c
void selectionSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
// Intercambia arr[i] y arr[minIndex]
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
```
3. Ordenamiento por Inserción (Insertion Sort)
- Toma un elemento y lo inserta en su posición correcta en una lista ya ordenada.
- Funciona bien para listas pequeñas o casi ordenadas.
- Complejidad: O(n²).
Ejemplo de código:
```c
void insertionSort(int arr[], int n) {
for (int i = 1; i < n; i++) {
int key = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}
` ```
4.Ordenamiento por Shell
#include <stdio.h>
void shellSort(int arr[], int n) {
// Empieza con un intervalo grande y lo reduce
for (int gap = n / 2; gap > 0; gap /= 2) {
// Realiza el ordenamiento por inserción con el intervalo 'gap'
for (int i = gap; i < n; i++) {
int temp = arr[i];
int j;
// Desplaza los elementos ordenados para insertar arr[i]
for (j = i; j >= gap && arr[j - gap] > temp; j -= gap) {
arr[j] = arr[j - gap];
}
arr[j] = temp;
}
}
}
void printArray(int arr[], int n) {
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int arr[] = {12, 34, 54, 2, 3};
int n = sizeof(arr) / sizeof(arr[0]);
printf("Arreglo original: \n");
printArray(arr, n);
shellSort(arr, n);
printf("Arreglo ordenado: \n");
p
rintArray(arr, n);
return 0;
}