1 Algoritmos para Ordenar datos
2 Algoritmos Básicos Burbuja Burbuja mejorado Sort de SelecciónSort de Inserción Luego se verán algoritmos más eficientes, se comienza con el método de la burbuja:
3 Burbuja void burbuja(int *arreglo, int n) { int aux,i,j; 1for(i=0;i
4 Burbuja Mejorado void burbujaMejorado(int *arreglo, int n) {int aux,i,j,bandera; for(i=0;i
5 Burbuja Mejorado Constituye una mejora ya que el algoritmo termina inmediatamente cuando los datos ya están ordenados Detecta que los datos ya están ordenados porque no se producen intercambios (bandera =0 al terminar el ciclo interno) Sigue siendo O(n2) (Peor caso)
6 Sort Selección void select(int *arreglo, int n) { int minj, minx; 1for(int i=0; i
7 for(int j=i+1; j
8 Sort de Inserción void sortInsercion( int v[], int n ) { int x, j; 1for(int i=1; i
9 Algoritmos eficientes para OrdenamientoA continuación se verán 2 algoritmos cuyo orden de magnitud promedio es O(nlog2n) siendo este el mejor orden que se logra en algoritmos de ordenamiento Los algoritmos son: - QuickSort (Ordenamiento rápido) - MergeSort (Ordenamiento por mezcla) Los algoritmos de Shell y HeapSort (entre otros) también logran este mismo orden
10 Quicksort La idea básica del algoritmo es seleccionar un elemento cualquiera como pivote. Se colocan a la izquierda del pivote todos los elementos que son menores que él y a su derecha todos los que son mayores. Tanto con el grupo de elementos que quedó a la izquierda como con el grupo de la derecha se invoca de nuevo el algoritmo de Quicksort y se repite el proceso hasta lograr el ordenamiento
11 QuickSort #include
12 QuickSort void main(void) { int vec[5]={6,4,3,8,1};Quicksort(vec,0,4); for(int k=0;k<5;k++) cout<< vec[k] << endl; } Imprimió: 1,3,4,6,8
13 MergeSort El algoritmo tiene 2 fases:Partición: Se divide sucesivamente la lista de elementos a ordenar en listas más pequeñas hasta llegar a listas de un solo elemento Mezcla: Se comienzan a mezclar las listas de un elemento para formar listas ordenadas de 2 elementos, luego se mezclan las listas de 2 elementos para formar listas de 4 elementos ordenadas y así sucesivamente hasta terminar
14 MergeSort: Fase de particiónEjemplo: Ordenar 3, 2, 6, 1, 13, 4, 21, 7 3, 2, 6, 1, 13, 4, 21, 7 3, 2, 6, 1 13, 4, 21, 7 13, 4 21, 7 3, 2 6,1 3 2 6 1 13 4 21 7
15 MergeSort: Fase de MezclaFinal 1,2,3,4,6,7,13,21 1,2,3,6 4,7,13,21 Mezcla Mezcla 4,13 7,21 2,3 1,6 Mezcla Mezcla Mezcla Mezcla 3 2 6 1 13 4 21 7
16 MergeSort #include
17 MergeSort void Mergesort (int *v, int primero, int ultimo) {int central; if(primero < ultimo ){ central = (primero + ultimo)/2; Mergesort(v,primero,central); Mergesort(v,central+1,ultimo); mezcla(v,primero,ultimo,central); }
18 MergeSort void main(void) { int vec[5]={5,1,33,12,11};Mergesort(vec,0,4); for(int k=0;k<5;k++) cout<< vec[k] << endl; } Imprimió: 1,5,11,12,33