MÉTODO QUICKSORT Quicksort es un algoritmo de ordenación considerado entre los más rápidos y eficientes. Fue diseñado en los años 60s por C. A. R. Hoare un científico en computación. El algoritmo usa la técnica divide y vencerás que básicamente se basa en dividir un problema en subproblemas y luego juntar las respuestas de estos est os subproblemas para obtener la solución al problema central.
DESCRIPCIÓN DE PROCESO:
El algoritmo del método de ordenamiento estará formado por tres procesos: procesos: • • •
QUICKSORT, proceso que inicia el ordenamiento. ENCUENTRA PIVOTE, busca el mejor pivote a partir del primer elemento del vector. PARTICIÓN, va comparando por ambos extremos e intercambia en caso de ser necesario.
La idea central de este algoritmo consiste en los siguientes: Se toma un elemento x de una posición cualquiera de arreglo. Se trata de ubicar a x en la posición correcta del arreglo, de tal forma que todos los elemento que se encuentran a su izquierda sean menores o iguales a x y todos los elementos que se encuentren a su derecha sean mayores o iguales a x. Se repiten los pasos anteriores pero ahora para los conjuntos de datos que se encuentran a la izquierda y a la derecha de la posición correcta de x en el arreglo. arre glo. Ejemplo: A: 15,67,08,16,44,27,12,35 Se selecciona A[i] x=15 Primera pasada (DER-IZQ) A[8] >= x 35 >= 15 No hay intercambio A[7] >= x 12 >= 15 Si hay intercambio A: 12, 67,08,16,44,27,15,35 (IZQ-DER) A[2] < = X 67 < = 15 Si hay intercambio A:12,15,08,16,44,27,67,35 2da. A[6] A[5] A[4] A[3]
Pasada (DER-IZQ) >= x 27 >= 15 No >= x 44 >= 15 No >= x 16 >= 15 No >= x 08 >= 15 Si
hay hay hay hay
intercambio intercambio intercambio intercambio
A: 12,08,15,16,44,27,67,35 Como el recorrido de izquierda a derecha debería iniciarse en la misma posición donde se encuentra el elemento x, el proceso se termina ya que el elemento x, se encuentra en la posición correcta.
A: 12, 08, 15, 16, 44, 27, 67, 35 1er 2do Conjunto Conjunto 16, 44, 27, 67, 35 x16 (DER-IZQ) A[8]>=x No A[7]>=x No A[6]>=x No A[5]>=x No
hay hay hay hay
intercambio intercambio intercambio intercambio
A: 12, 08, 15, 16, 44, 27, 67, 35 xß44 (DER-IZQ) A[8]>= x Si hay intercambio A: 12, 08, 15, 16, 35, 27, 67, 44 (IZQ-DER) A[6] < = x No hay intercambio A[7] < = x Si hay intercambio 12, 08, 15, 16, 35, 27, 44, 67 12, 08, 15, 16, 35, 27, 44, 67 35, 27, 44, 67 xß35 (DER-IZQ) A[8] >= x No hay intercambio A[7] >= x No hay intercambio A[6] >= x Si hay intercambio 12, 08, 15, 16, 27, 35, 44, 67 12,08 xß12 (DER-IZQ) A[2]>=x Si hay intercambio EL VECTOR ORDENADO: 08,12,15,16,27,35,44,67
DIAGRAMA DE FLUJO DEL MÉTODO DE ORDENAMIENTO DE QUICKSORT
PROGRAMACIÓN DEL QUICKSORT EN C++ #include
#include void quicksort (int v [],int izquierda ,int derecha ) { int i=izquierda,j=derecha ; int tmp ; int pivote=v[(izquierda+derecha)/ 2]; while(i<=j) { for(i=izquierda;v[i]pivote;j--); if(i<=j) { tmp = v[i]; v[i]=v[j]; v[j]=tmp ; i++; j--; } } if (izquierda>n; for (int i=0 i=0;i>v[i]; } quicksort (v, 0, n-1 n-1); cout<<"numeros cout<< "numeros ordenados son" <
DIAGRAMA DE FLUJO DE ORDENAMIENTO POR INSERCIÓN
PROGRAMACIÓN DEL INSERCIÓN EN C++ #include #include void main() {clrscr(); int i,j,v[30 i,j,v[30], ], aux,n; cout<<"ingrese cout<< "ingrese el tamaño del vector: " ; cin>>n; for(i=1 for(i= 1;i<=n;i++) {cout<<"vetor[" {cout<< "vetor["<<(i)<< <<(i)<<"]:" "]:";; cin>>v[i]; } for(i=1 for(i= 1;i0 {for(j=i;j> 0;j--) {if(v[j+1 {if(v[j+ 1]
DIAGRAMA DE FLUJO DE ORDENAMIENTO POR BURBUJA
PROGRAMACIÓN DE BURBUJA EN C++
#include #include void main() {int j,i,n,aux,v[50],k=1,p,x j ,i,n,aux,v[50],k=1,p,x;; cout<<"ingrese numero de vectores:"; cin>>n; for(i=1;i<=n;i++) {cout<<"ingrse vector["<<(i)<<"]:"; cin>>v[i]; } {for(p=1;p<3;p++) for(i=1;i<=n-1;i++) { for(j=1;j<=n-1;j++) if(v[j]>v[j+1]) {aux=v[j]; v[j]=v[j+1]; v[j+1]=aux; }} cout<<"el numero ordenado es:\n"; for(i=1;i<=n;i++) {cout<>x; n=n+1; v[n]=x;} cout<<"el numero ordenado es:\n"; for(i=1;i<=n;i++) {cout<
DIAGRAMA DE FLUJO DE ORDENAMIENTO POR SELECCIÓN DIRECTA
PROGRAMACIÓN DE SELECCIÓN DIRECTA EN C++ #include #include void main() {clrscr(); int i,j,a[30], aux,menor,n; cout<<"ingrese el tamaño del vetor: "; cin>>n; for(i=1;i<=n;i++) { cout<<"vetor["<<(i)<<"]:"; cin>>a[i]; } for(i=1;i
MÉTODO MERGESORT Este algoritmo fue desarrollado por el matemático húngaro John Von Neumann en 1945. Consiste en dividir en dos partes iguales el vector a ordenar, ordenar por separado cada una de las partes, y luego mezclar ambas partes, manteniendo el orden, en un solo vector ordenado. El algoritmo MergeSort (u Ordenamiento por mezcla) es un algoritmo que sirve para ordenar secuencias de datos.
DESCRIPCIÓN DE PROCESO: Utiliza los siguientes tres pasos: eleme ntos a ordenar en dos subsecuencias de "n/2 DIVIDIR: divide la secuencia de "n" elementos elementos cada una. VENCER: ordena las dos subsecuencias de manera recursiva mediante el algoritmo MERGESORT. COMBINAR: combina las dos subsecuencias ordenadas para generar la solución.
”
PROCEDIMIENTO MERGESORT /*recibe el arreglo a ordenar un índice l que indica el límite inferior del arreglo a ordenar y un índice r que indica el límite superior*/ void mergesort(int a[], int l, int r) { int i,j,k,m,b[MAX]; if (r > l) { m = (r+l) /2; mergesort(a, l, m); mergesort(a, m+1, r); for (i= m+1; i > l;i--) b[i-1] = a[i-1]; for (j= m; j < r;j++) b[r+m-j] = a[j+1]; for (k=l ; k <=r; k++) if(b[i] < b[j]) a[k] = b[i++]; else a[k] = b[j--]; } } a = {a,s,o,r,t,i,n,g,e,x,a {a,s,o,r,t,i,n,g,e,x,a,m,p,l,e} ,m,p,l,e} {a,s, o,r, a,o,r,s, i,t, g,n, g,i,n,t, a,g,i,n,o,r,s,t, e,x, a,m, a,e,m,x, l,p, e,l,p} a,e,e,l,m,p,x} a = {a,a,e,e,g,i,l,m,n,o,p {a,a,e,e,g,i,l,m,n,o,p,r,s,t,x} ,r,s,t,x}
REFERENCIAS BIBLIOGRÁFICAS
http://ronnyml.wordpress.com/2009/07/19/quicksort-en-c/ 21/04/2013 04:41 http://www.angelfire.com/wy2/est_info/quicksort.html 21/04/2013 05:09 http://www.slideshare.net/djmada/quick-sort-estructura-de-datos 21/04/2013 05:09 http://diagramadeflujodeordenamiento.blogspot.com/ 21/04/2013
05:21
http://aprende-sistemasarreglos.blogspot.com/2009/03/mergesort.html 21/04/2013 http://wernesystem.blogspot.com/ 21/04/2013
05:42
http://ict.udlap.mx/people/ingrid/Clases/IS211/Ordenar.html 21/04/2013
05:42
05:42