ORDENAMIENTO
Los algoritmos de ordenación son un tema de constante
estudio en las ciencias informáticas.
El ordenamiento por burbuja es
bastante sencillo, consiste en evaluar pares de elementos contiguos del arreglo
y si el primero es mayor que el siguiente los intercambia (los más chicos
quedan abajo). Todo ésto sucede dentro de dos ciclos for que recorren el arreglo. El ciclo
más interno realiza las comparaciones, y se asegura ya en la primera pasada
completa que el elemento más grande del arreglo suba a la posición más alta.
Conceptos
Preliminares
·
Clave: La parte de un registro por la cual se
ordena la lista. Por ejemplo, una lista de registros con
campos nombre, direccion y telefono se puede ordenar
alfabéticamente de acuerdo a la clave nombre. En este caso los
campos direccion y telefono no se toman en cuenta en el
ordenamiento.
·
Criterio de ordenamiento (o de comparación): EL criterio
que utilizamos para asignar valores a los registros con base en una o más claves. De esta manera decidimos si un
registro es mayor o menor que otro. En el
pseudocódigo presentado más adelante simplemente se utilizarán los
símbolos < y >, para mayor simplicidad.
·
Registro: Un grupo de datos que forman la lista. Pueden ser
datos atómicos (enteros, caracteres, reales, etc.) o grupos de ellos, que en C
equivalen a las estructuras.
Tipos de Ordenamiento:
Ordenamiento Burbuja
//Ordena
el número de números que usted quiera.
//Codificado por: Danny
Henderson
??=include<iostream>
using namespace std;
int main()
??<
int i,j,k,cn;
int n??('cn'??);
cout<<"Cantidad
de numeros que desea Ingresar: ";cin>>cn;
for(i=0;i<cn;i++)
{
cout<<"Ingrese
numero "<<i+1<<" : ";
cin>>n[i];
}
for(i=1;i<cn;i++)
{
for(j=0;j<cn-i;j++)
{
if(n[j]>n[j+1])
{k=n[j+1];
n[j+1]=n[j]; n[j]=k;}
}
}
for(i=0;i<cn;i++)
{
cout<<n[i]<<endl;
}
cin.ignore();
return 0;
??>
Ordenamiento por selección
//Selection sort
//Codificado por sAfOrAs
#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++)
if(A[min]
> A[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);
#include<iostream>
using namespace std;
void leeCadena(int cant,int n[])
{
int i;
for(i=0;i<cant;i++)
{
cout<<"Ingresa
numero "<<i+1<<": ";
cin>>n[i];
}
}
void muestraCadena(int cant,int n[])
{
int i;
for(i=0;i<cant;i++)
{
cout<<n[i]<<endl;
}
}
Ordenamiento
por Inserción Directa
//Inserción
Directa
//Codificado
por sAfOrAs
#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);
}
No hay comentarios:
Publicar un comentario