Código Bash – Ordenamiento Burbuja


El siguiente código trata del método de ordenamiento burbuja en bash:

#!/bin/bash
function burbuja {
	lista=$1
	tam=${#lista[@]}

	for i in $(seq 1 $[$tam-1]); do
        	for j in $(seq 0 $[$tam - $i - 1]); do
            		if [ ${lista[$j]} -gt ${lista[$j+1]} ] ; then
                		k=${lista[$[$j+1]]}
                		lista[$j+1]=${lista[$j]}
                		lista[$j]=$k
			fi
		done
	done
}

lista=(5 4 3 2 1)

burbuja $lista

for i in ${lista[@]};do	echo $i; done

Código C++ – 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);
  
}
#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;
	}
}

Código C++ – Ordenamiento Radix


//Fuente en C: http://es.wikipedia.org/wiki/Ordenamiento_Radix
//Modificado a C++ : sAfOrAs

#include<iostream>
using namespace std;
#include <math.h>
#define NUMELTS 20
 
void radixsort(int x[], int n)
{
	int front[10], rear[10];

	struct {
		int info;
		int next;
	} node[NUMELTS];
	
	int exp, first, i, j, k, p, q, y;
 
  /* Inicializar una lista vinculada */
	for (i = 0; i < n-1; i++)
	{
		node[i].info = x[i];
		node[i].next = i+1;
	} /* fin del for */
	
	node[n-1].info = x[n-1];
	node[n-1].next = -1;
	first = 0; /* first es la cabeza de la lista vinculada */
	
	for (k = 1; k < 5; k++) 
	{
	/* Suponer que tenemos números de cuatro dígitos */
		for (i = 0; i < 10; i++)
		{
		/*Inicializar colas */
			rear[i] = -1;
			front[i] = -1;
		} /*fin del for */

		/* Procesar cada elemento en la lista */
		while (first != -1)
		{
			p = first;
			first = node[first].next;
			y = node[p].info;
			/* Extraer el kâsimo dÁgito */
			exp = pow(10, k-1);	/* elevar 10 a la (k-1)ésima potencia */
			j = (y/exp) % 10;
			/* Insertar y en queue[j] */
			q = rear[j];
			if (q == -1)
				front[j] = p;
			else
				node[q].next = p;
			rear[j] = p;
		} /*fin del while */
	 
	    /* En este punto, cada registro está en su cola basándose en el dígito k
	       Ahora formar una lista única de todos los elementos de la cola.
	       Encontrar el primer elemento. */
		for (j = 0; j < 10 && front[j] == -1; j++);
			;
		first = front[j];
	 
	    /* Vincular las colas restantes */
		while (j <= 9)
		{ 	/* Verificar si se ha terminado */
			/*Encontrar el elemento siguiente */
			for (i = j+1; i < 10 && front[i] == -1; i++);
				;
			if (i <= 9)
			{
				p = i;
				node[rear[j]].next = front[i];
			} /* fin del if */
			j = i;
		} /* fin del while */
		node[rear[p]].next = -1;
	} /* fin del for */
 
	/* Copiar de regreso al archivo original */
	for (i = 0; i < n; i++) 
	{
    		x[i] = node[first].info;
    		first = node[first].next;
	} /*fin del for */
} /* fin de radixsort*/
 
 
int main(void)
{
	int x[50] = {NULL}, i;
	static int n;
 
	cout<<"Cadena de números enteros:\n";
	for (n = 0;; n++)
	{
		cin>>x[n]; 
		if(x[n]==-1)
			break;
	}
	
	if (n)
		radixsort (x, n);
	for (i = 0; i < n; i++)
		cout<<x[i]<<endl;;
	
	return 0;
}

Código C++ – Ordenamiento por Inserción Binaria


//Selection binary
//Codificado por sAfOrAs
#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);
  
}
#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;
	}
}

Código C++ – Ordenamiento Heap Sort


//Heap Sort
//Codificado por sAfOrAs
#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;
}
#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;
	}
}