sábado, 12 de julio de 2014

EVAP - 7 ORDENAMIENTO

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