Código Python – Ordenamiento Shell


El siguiente post pertenece al topic: Métodos de Ordenamiento codificados en Python.

El código realiza un Ordenamiento de datos numéricos haciendo uso del Método Shell:

def ordenShell(lista,tam):
    inc=1
    for inc in range(1,tam,inc*3+1):
        while inc>0:
            for i in range(inc,tam):
                j=i
                temp=lista[i]
                while j>=inc and lista[j-inc]>temp:
                    lista[j]=lista[j-inc]
                    j=j-inc
                lista[j]=temp
            inc=inc/2

def imprimeLista(lista,tam):
    for i in range(0,tam):
        print lista[i]

def leeLista():
    lista=[]
    cn=int(raw_input("Cantidad de numeros a ingresar: "))

    for i in range(0,cn):
        lista.append(int(raw_input("Ingrese numero %d : " % i)))
    return lista
Anuncios

Código PHP – Ordenamiento Shell


El siguiente post pertenece al topic: Métodos de Ordenamiento codificados en PHP.

El código realiza un Ordenamiento de datos numéricos haciendo uso del Método Shell:

<?php

    function ordenamientoShell($A,$n)
    {
        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))
				{
					$A[$j] = $A[$j - $inc];
					$j = $j - $inc;
				}

				$A[$j] = $temp;
		  }

		  $inc/= 2;
	  }

          return $A;
    }

    function main()
    {

        $VectorA=array(5,4,3,2,1);

        $VectorB=ordenamientoShell($VectorA,sizeof($VectorA));

        for($i=0;$i<sizeof($VectorB);$i++)
            echo $VectorB[$i]."\n";

    }

    main();
?>

Código Bash – Ordenamiento Shell


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

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

        for inc in $(seq 1 $[$[inc*3]+1] $[$tam-1]) ; do
            while [ $inc -gt 0 ] ; do
                  for i in $(seq $inc $[$tam-1]) ; do
                        j=$i
                        temp=${lista[$i]}
                        while [[ $j -ge $inc && ${lista[$[$j-$inc]]} -gt $temp ]] ; do
                                lista[$j]=${lista[$[$j-$inc]]}
                                j=$[$j-$inc]
                        done
                        lista[$j]=$temp
                  done
                  inc=$[$inc/2]
            done
        done
}

lista=(5 4 3 2 1)

shell $lista

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

Código C++ – Ordenamiento Shell


//Ordenamiento Shell
//Codificado por sAfOrAs
#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))
				{
					A[j] = A[j - inc];
					j = j - inc;
				}
      
				A[j] = temp;
		  }
		
		  inc/= 2;
	  }
}
 
 
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);
    ordenShell(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;
	}
}