Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Me Todos
Me Todos
Concepto: Algoritmo que pone elementos de una lista o un vector, en una secuencia dada por
una relacin de orden.
#include<conio.h>
int a[3]={3,2,1};
int i,j,aux,n=3;
void main(){
clrscr();
for(i=0;i<=n;i++){
for(j=0;j<n-1;j++){
if(a[j]>a[j+1]){
aux=a[j];
a[j]=a[j+1];
a[j+1]=aux;
for(i=0;i<3;i++)
printf("%d",a);
getch();
}
MTODO DE INSERCIN
El mtodo de "insercin" est basado en la tcnica que utilizan los jugadores de cartas para
ordenar sus cartas. El jugador va insertando cada una de las cartas en la posicin
correspondiente.
int i, a, aux;
aux = vector[i];
vector[a + 1] = vector[a];
vector[a+1] = aux;
}
Insercin
#include<stdio.h>
#include<conio.h>
int a[4]={4,1,7,2};
int n=4;
int i,j,aux;
void main(){
clrscr();
for(i=1;i<n;i++)
{
j=i;
aux=a;
while(j>0 && aux<a[j-1])
{
a[j]=a[j-1];
j--;
}
a[j]=aux;
}
for(i=0;i<4;i++)
{
printf("%d",a);
}
getch();
}
MTODO POR SELECCIN
Es bastante adecuado para ordenar listas de tamao moderado, debido a que su velocidad es
aceptable y su codificacin es bastante sencilla. Su velocidad depende de la secuencia de
valores con los cuales trabaja, ordenndolos.
Ejemplo
Por ejemplo, considere una lista de nmeros como [13 14 94 33 82 25 59 94 65 23 45 27 73 25
39 10]. Si comenzamos con un tamao de paso de 8, podramos visualizar esto dividiendo la
lista de nmeros en una tabla con 5 columnas. Esto quedara as:
#include<stdio.h>
#include<conio.h>
int a[5];
int n=5;
void main()
{
int inter=(n/2),i=0,j=0,k=0,aux;
clrscr();
for (i=0; i<5; i++)
{
printf("INSERTA UN VALOR DEL INDICE %d", i);
scanf("%d",& a);
}
while(inter>0){
for(i=inter;i<n;i++)
{
j=i-inter;
while(j>=0) {
k=j+inter;
if(a[j]<=a[k]){
j--;
}
else{
aux=a[j];
a[j]=a[k];
a[k]=aux;
j=j-inter;
}
}
}
inter=inter/2;
}
for(i=0;i<5;i++)
{
printf("%d n",a);
getch();
}
}
ORDENAMIENTO POR MONTCULOS - HEAPSORT
Un montculo es una estructura tipo rbol binario que garantiza que en la cima siempre est
el elemento mayor.
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;
}
MergeSort (Ordenamiento por mezcla)
MergeSort es un algoritmo de ordenamiento muy eficiente que utiliza la tcnica "divide y
vencers". Su orden asinttico es O(n*log(n)).
Para ordenar un vector lo divide por la mitad en dos segmentos y ordena cada segmento de
forma recursiva osea nuevamente divide cada segmento y ordena los subsegmentos de forma
recursiva... hasta que en algn momento los segmentos sern de longitud 1 es cuando se llama
a la funcin "merge" (mezclar) que intercala los elementos del ltimo segmento dividido
colocando primero los elementos menores.
Descripcin
MergeSort (u Ordenamiento por mezcla) es uno de los Algoritmos de Ordenamientos ms
eficientes que existen, fue creado en 1945 por John Von Neumann. 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.
Utiliza los siguientes tres pasos:
Dividir: Divide la secuencia de n elementos a ordenar en dos subsecuencias de n/2
elementos cada una, pues es ms sencillo ordenar una parte de los datos que el
conjunto completo de ellos.
Ordenar: Ordena las dos subsecuencias de manera recursiva mediante el algoritmo
MergeSort, comparando cada elemento de las subsecuencias.
Combinar: Combina las dos subsecuencias ordenadas para generar la solucin, cuando
quede un solo dato en un subgrupo se termina el proceso de divisin pues ese
subgrupo ya est ordenado.
#include <stdlib.h>
#include <stdio.h>
void merge(int *v, int i, int m, int f);
int main() {
int *v, n;
printf("Ingrese N: ");
scanf("%d", &n);
v = new int[n];
for(int i=0; i<n; i++) {
printf("Elemento %d: ", i+1);
scanf("%d", &v[i]);
}
mergesort(v, 0, n-1);
for(int i=0; i<n; i++)
printf("%d ", v[i]);
return 0;
}
void mergesort(int *v, int i, int f) {
if(i!=f) {
int m = (i+f)/2;
mergesort(v, i, m);
mergesort(v, m+1, f);
merge(v, i, m, f);
}
}
void merge(int *v, int i, int m, int f) {
int *aux = new int[m-i+1];
for(int j=i; j<=m; j++)
aux[j-i] = v[j];
int c1=0, c2=m+1;
for(int j=i; j<=f; j++) {
if(aux[c1] < v[c2]) {
v[j] = aux[c1++];
if(c1==m-i+1)
for(int k=c2; k<=f; k++)
v[++j] = v[k];
}
else {
v[j] = v[c2++];
if(c2==f+1)
for(int k=c1; k<=m-i; k++)
v[++j] = aux[k];
}
}
}