Burb Uja
Burb Uja
Burb Uja
CURSO: 3 -A
ASIGNATURA: Estructura de Datos
METODOS DE ORDENACION EN C++
Tipos de Ordenamiento:
Ordenamiento interno.
Se lleva a cabo completamente en memoria principal. Todos los objetos que se ordenan
caben en la memoria principal de la computadora
Ordenamiento externo.
No cabe toda la información en memoria principal y es necesario ocupar memoria
secundaria. El ordenamiento ocurre transfiriendo bloques de información a memoria
principal en donde se ordena el bloque y este es regresado, ya ordenado, a memoria
secundaria
METODOS:
BURBUJA
Ejemplo:
POR SELECCIÓN
Ejemplo:
#include<iostream>
using namespace std;
#include"leearreglo.h"
#define largo 50
void seleccionsort (int A[], int n)
{
int min,i,j,aux;
for (i=0; i<n-1; i++)
{
min=i;
for(j=i+1; j<n; j++)
min=j;
aux=A[min];
A[min]=A[i];
A[i]=aux ;
}
}void main ()
{
int A[largo],n;
do{
cout<<"Cantidad de numeros a ingresar: ";cin>>n;
if(n<=0||n>largo)
cout<<"Debe ingresar un valor > a 0 y < a "<<largo<<endl;
}while(n<=0||n>largo);
leeCadena(n,A);
seleccionsort(A,n);
muestraCadena(n,A);
}
INSERCION
Este método toma cada elemento del arreglo para ser ordenado y lo compara con los que
se encuentran en posiciones anteriores a la de él dentro del arreglo. Si resulta que el
elemento con el que se está comparando es mayor que el elemento a ordenar, se recorre
hacia la siguiente posición superior. Si por el contrario, resulta que el elemento con el que
se está comparando es menor que el elemento a ordenar, se detiene el proceso de
comparación pues se encontró que el elemento ya está ordenado y se coloca en su
posición (que es la siguiente a la del último número con el que se comparó).
Este también es un algoritmo lento, pero puede ser de utilidad para listas que están
ordenadas o semiordenadas, porque en ese caso realiza muy pocos desplazamientos.
Ejemplo:
#include<iostream>
#include"leearreglo.h"
using namespace std;
#define largo 50
void insercionDirecta(int A[],int n)
{
int i,j,v;
for (i = 1; i < n; i++)
{
v = A[i];
j=i -1;
while (j >= 0 && A[j] > v)
{
A[j + 1] = A[j];
j--;
}A [j + 1 ] = v ;
}
}void main ()
{
int A[largo],n;
do{
cout<<"Cantidad de numeros a ingresar: ";cin>>n;
if(n<=0||n>largo)
cout<<"Debe ingresar un valor > a 0 y < a "<<largo<<endl;
}while(n<=0||n>largo);
leeCadena(n,A);
insercionDirecta(A,n);
muestraCadena(n,A);
ORDENAMIENTO RAPIDO
Ejemplo:
El método de ordenación por 'inserción binaria'' es una mejora del método de inserción
directa. Para lograr esta mejora se recurre a una búsqueda binaria en lugar de una
búsqueda secuencial para insertar un elemento en la parte izquierda del arreglo, que ya
se encuentra ordenado. El resto del procedimiento es similar al de inserción directa, es
decir, se repite este mismo procedimiento desde el segundo término hasta elúltimo
elemento.
Ejemplo:
#include<iostream>
#include"leearreglo.h"
using namespace std;
#define largo 50
void insercionBinaria(int A[],int n)
{
int i,j,aux,izq,der,m;
for(i=1;i<n;i++)
{
aux = A[i];
izq=0;
der=i-1;
while(izq<=der)
{
m=((izq+der)/2);
if (aux<A[m])
der=m-1;
else
izq=m+1;
}
j=i-1;
while(j>=izq)
{
A[j+1]=A[j];
j=j-1;
}A[izq]=aux;
}
}void main ()
{
int A[largo],n;
do{
cout<<"Cantidad de numeros a ingresar: ";cin>>n;
if(n<=0||n>largo)
cout<<"Debe ingresar un valor > a 0 y < a "<<largo<<endl;
}while(n<=0||n>largo);
leeCadena(n,A);
insercionBinaria(A,n);
muestraCadena(n,A);
El método Shell es una versión mejorada del método de inserción directa. Este método
también se conoce con el nombre de inserción con incrementos decrecientes. En el
método de ordenación por inserción directa cada elemento se compara para su ubicación
correcta en el arreglo, con los elementos que se encuentran en la parte izquierda del
mismo. Si el elemento a insertar es más pequeño que el grupo de elementos que se
encuentran a su izquierda, es necesario efectuar entonces varias comparaciones antes de
su ubicación.
Ejemplo:
#include<iostream>
#include"leearreglo.h"
using namespace std;
#define largo 50
void ordenShell(int A[],int n)
{int i, j, inc, temp;
for(inc = 1 ; inc<n;inc=inc*3+1);
while (inc > 0)
{
for (i=inc; i < n; i++)
{
j = i;
temp = A[i];
while ((j >= inc) && (A[j-inc] > temp))
{
int A[largo],n;
do{
cout<<"Cantidad de numeros a ingresar: ";cin>>n;
if(n<=0||n>largo)
cout<<"Debe ingresar un valor > a 0 y < a "<<largo<<endl;
}while(n<=0||n>largo);
leeCadena(n,A);
ordenShell(A,n);
muestraCadena(n,A);
Este método consiste en almacenar todos los elementos del vector a ordenar en un
montículo (heap), y luego extraer el nodo que queda como nodo raíz del montículo (cima)
en sucesivas iteraciones obteniendo el conjunto ordenado. Basa su funcionamiento en
una propiedad de los montículos, por la cual, la cima contiene siempre el menor elemento
(o el mayor, según se haya definido el montículo) de todos los almacenados enél.
Ejemplo:
#include <iostream>
#define max 100
using namespace std;
int main()
{
int A[max],j,item,temp,i,k,n;
cout<<"Ingresa la cantidad de elementos del arreglo: ";
cin>>n;
for(i=1;i<=n;i++)
cin >> A[i];
for(k=n;k>0;k--)
{
for(i=1;i<=k;i++)
{
item=A[i];
j=i/2;
while(j>0 && A[j]<item)
{
A[i]=A[j];
i=j;
j=j/2;
}A[i]=item;
}temp=A[1];
A[1]=A[k];
A[k]=temp;
}cout<<"El orden es:"<<endl;
for(i=1;i<=n;i++)
cout<<A[i] << endl;
return 0;