Você está na página 1de 11

oredenamento mergesort

cpp
// En el cdigo usamos la clase vector (#include <vector.h>) para crear los vector
es,
// obviamente funciona igual de bien si se utilizan los arrays tipo C: TIPO V[]
template <class T, class U>
void fusiona(vector<T>& v, U ini, U med, U fin) {
vector<T> aux(fin - ini + 1);
int i = ini; // ndice de la parte izquierda
int j = med + 1; // ndice de la parte derecha
int k = 0; // ndice del vector aux
/* Mientras ninguno de los indices llegue a su fin vamos realizando
comparaciones. El elemento ms pequeo se copia al vector aux */
while (i <= med && j <= fin) {
if (v[i] < v[j]) {
aux[k] = v[i];
i++;
}
else {
aux[k] = v[j];
j++;
}
k++;
}
/* Uno de los dos sub-vectores ya ha sido copiado del todo, simplemente
debemos copiar todo el sub-vector que nos falte */
while (i <= med) {
aux[k] = v[i];
i++;
k++;
}
while (j <= fin) {
aux[k] = v[j];
j++;
k++;
}
/* Copiamos los elementos ordenados de aux al vector original v */
for (int n = 0; n < aux.size(); ++n) v[ini + n] = aux[n];
}
template <class T, class U>
void merge_sort(vector<T>& v, U ini, U fin) {
/* Si ini = fin el sub-vector es de un solo elemento y, por lo tanto
ya est ordenado por definicin */
if (ini < fin) {
/*Considerar que el valor de med siempre es redondeado hacia abajo.*/
int med = (ini + fin)/2;
merge_sort(v, ini, med);
merge_sort(v, med + 1, fin);
fusiona(v, ini, med, fin);
}
}

c
void mezclar(int arreglo1[], int n1, int arreglo2[], int n2, int arreglo3[])
{
int x1=0, x2=0, x3=0;
while (x1<n1 && x2<n2) {
if (arreglo1[x1]<arreglo2[x2]) {
arreglo3[x3] = arreglo1[x1];
x1++;
} else {
arreglo3[x3] = arreglo2[x2];
x2++;
}
x3++;
}
while (x1<n1) {
arreglo3[x3] = arreglo1[x1];
x1++;
x3++;
}
while (x2<n2) {
arreglo3[x3] = arreglo2[x2];
x2++;
x3++;
}
}
void mezcla(int vector[], int n)
{
int *vector1, *vector2, n1, n2,x,y;
if (n>1)
{
if (n%2 == 0)
n1=n2=(int) n / 2;
else
{
n1=(int) n / 2;
n2=n1+1;
}
vector1=(int *) malloc(sizeof(int)*n1);
vector2=(int *) malloc(sizeof(int)*n2);
for(x=0;x<n1;x++)
vector1[x]=vector[x];
for(y=0;y<n2;x++,y++)
vector2[y]=vector[x];
mezcla(vector1, n1);
mezcla(vector2, n2);
mezclar(vector1, n1, vector2, n2, vector);
free(vector1);
free(vector2);
}
}
int main(){
int i, vector[] = {2,3,5,7,2,6,1,5,8,3,2};
mezcla(vector,12);
for(i=0;i<12;i++)

printf("%i,\n", vector[i]);
return 0;
}
java
public class MergeSort{
private int A[];
public int[] OrdenaMerge(int[] L) {
int n = L.length;
if (n >
int
int
int

1){
m = (int) (Math.ceil(n/2.0));
[] L1 = new int[m];
[] L2 = new int[n-m];

for (int i = 0; i < m; i++){


L1[i] = L[i];
}
for (int i = m; i < n; i++){
L2[i-m] = L[i];
}
L = merge(OrdenaMerge(L1), OrdenaMerge(L2));
}
return L;
}
public int[] eliminar(int [] l){
int [] L = new int[l.length-1];
for(int i = 1; i < l.length; i++){
L[i-1] = l[i];
}
return L;
}
public int[] merge(int[] L1, int[] L2) {
int[] L = new int[L1.length+L2.length];
int i = 0;
while ((L1.length != 0) && (L2.length != 0)) {
if (L1[0] < L2[0]){
L[i++] = L1[0];
L1 = eliminar(L1);
if (L1.length == 0){
while (L2.length != 0) {
L[i++] = L2[0];
L2 = eliminar(L2);
}
}
}
else{
L[i++] = L2[0];
L2 = eliminar(L2);
if (L2.length == 0) {
while (L1.length != 0) {
L[i++] = L1[0];
L1 = eliminar(L1);
}
}
}

}
return L;
}
public void generarNumeros(){
Random ran = new Random();
int x;
for(int i = 0; i < A.length; i++){
x = (int)(ran.nextDouble()*10000);
A[i] = x;
}
}
public void imprimir(){
for(int i = 0; i < A.length; i++){
System.out.println(A[i]);
}
}
public int[] getA(){
return A;
}
public void setA(int []A){
this.A = A;
}
}
quicksort
int colocar(int *v, int b, int t)
{
int i;
int pivote, valor_pivote;
int temp;
pivote = b;
valor_pivote = v[pivote];
for (i=b+1; i<=t; i++){
if (v[i] < valor_pivote){
pivote++;
temp=v[i];
v[i]=v[pivote];
v[pivote]=temp;
}
}
temp=v[b];
v[b]=v[pivote];
v[pivote]=temp;
return pivote;
}

void Quicksort(int* v, int b, int t)


{
int pivote;

if(b < t){


pivote=colocar(v, b, t);
Quicksort(v, b, pivote-1);
Quicksort(v, pivote+1, t);
}
}
#include
#include
#include
#include
#include

<stdio.h>
<iostream.h>
<conio.h>
<stdlib.h>
<string.h>

using namespace std;


typedef struct nodo
{
int cedula;
struct nodo*siguiente;
}tiponodo;
typedef tiponodo *pnodo;
typedef tiponodo *cola;
cola cola_n=NULL;
cola cola_vip=NULL;
int solic;
void insertar (cola *cola_n)
{
cola aux, creado;
creado=(pnodo)malloc(sizeof(tiponodo));
cout<<"
<endl;
cout<<"
<endl;
cout<<"
<endl;
cout<<"
<endl;
cout<<"
cin>>
cout<<"

|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||"<
||||||||||||||||||||METROPOLI banco universal||||||||||||||||||||"<
|||||||||||||||||||||||Le da la bienvenida|||||||||||||||||||||||"<
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||"<
Estimado cliente: Introduzca su numero de cedula"<<endl;
creado->cedula;
Pronto sera atendido"<<endl;

if ((*cola_n)==NULL)
{
creado->siguiente=*cola_n;
*cola_n=creado;
}
else
{
aux=*cola_n;
while(aux!=NULL)
{
if(aux->siguiente==NULL)
{

creado->siguiente=aux->siguiente;
aux->siguiente=creado;
aux=aux->siguiente;
}
aux=aux->siguiente;
}
}
}
void mostrar_cola (cola cola_n)
{
cola aux;
aux=cola_n;
if(aux==NULL)
{
cout<<"No hay clientes en cola"<<endl;
}
else
{
while(aux!=NULL)
{
cout<<"Cedula: "<<aux->cedula<<endl;
cout<<""<<endl;
aux=aux->siguiente;
cout<<"* Clientes ordenados por orden de llegada((((((SIMCOLAS))))))"<<
endl;
}
}
}
//modificado hasta ac... falta de orden por parte del creador
void insertar_vip (cola *cola_vip){
cola aux_2, creado_vip;
creado_vip=(pnodo)malloc(sizeof(tiponodo));
cout<<" |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"<<endl;//62
cout<<" ||||||||||||||||||||METROPOLI banco universal||||||||||||||||||||
"<<endl;
cout<<" |||||||||||||||||||||||Le da la bienvenida|||||||||||||||||||||||
"<<endl;
cout<<" |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"<<endl;
cout<<" Estimado cliente: Introduzca su numero de cedula"<<endl;
cin>>
creado_vip->cedula;
cout<<" Pronto sera atendido"<<endl;
if ((*cola_vip)==NULL){
creado_vip->siguiente=*cola_vip;
*cola_vip=creado_vip;
}else{
aux_2=*cola_vip;
while(aux_2!=NULL){
if(aux_2->siguiente==NULL){
creado_vip->siguiente=aux_2->siguiente;
aux_2->siguiente=creado_vip;
aux_2=aux_2->siguiente;
}
aux_2=aux_2->siguiente;
}
}
}

void mostrar_cola_vip (cola cola_vip){


cola aux_2;
aux_2=cola_vip;
if(aux_2==NULL){
cout<<"No hay clientes V.I.P en cola"<<endl;
}else{
while(aux_2!=NULL){
cout<<"Cedula: "<<aux_2->cedula<<endl;
cout<<""<<endl;
cout<<"* Clientes ordenados por orden de llegada((((((SIMCOLAS))))))"
<<endl;
aux_2=aux_2->siguiente;
}
}
}
void pop (cola *cola_n){
if((*cola_n)==NULL){
cout<<"No hay clientes en cola ((((((SIMCOLAS))))))"<<endl;
cout<<""<<endl;
}
if((*cola_n)!=NULL){
cout<<"Cliente: "<<(*cola_n)->cedula;
cout<<" es su turno"<<endl;
*cola_n=(*cola_n)->siguiente;
free(cola_n);
system("PAUSE");
cout<<""<<endl;
}
if((*cola_n)==NULL){
cout<<"No hay clientes en cola (((
(((SIMCOLAS))))))"<<endl;
cout<<""<<endl;
}else{
cout<<"Cliente: "<<(*cola_n)->cedula;
cout<<" es su turno"<<endl;
*cola_n=(*cola_n)->siguiente;
free(cola_n);
system("PAUSE");
cout<<""<<endl;
}
}
void pop_vip(cola *cola_vip){
if(cola_vip!=NULL){
cout<<"Cliente: "<<(*col
a_vip)->cedula;
cout<<" es su turno"<<en
dl;
*cola_vip=(*cola_vip)->s
iguiente;
free(cola_vip);
}else{
cout<<"No hay usua

rios V.I.P en cola ((((((SIMCOLAS))))))"<<endl;


}
}

void menu();
void
void
void
void
void
void

Insertar();
insertar_vip();
mostrar_cola();
mostrar_colavip();
solicitar_numero();
salir();

struct perly{
char uxer[];
}data;
struct perly *p = &data;
int main(int argc, char *argv[])
{
system("color 0a");
cout<<"
<<endl;
cout<<"
<<endl;
cout<<"
<<endl;
cout<<"
<<endl;
cout<<"
<<endl;
cout<<"
<<endl;
cout<<"
dl;
cout<<"
<<endl;
cout<<"
dl;
cout<<"
<<endl;
cout<<"
<<endl;
cout<<"
<<endl;
cout<<"
dl;
cout<<"
<<endl;
cout<<"
dl;
cout<<"
<<endl;

|
*
__
*

_| |_

|________ |__

| [___] |

"

____

|....| |....|

___

|....| | ___|__

| |_| |....| || -- - |

|__[]| |

"
*

"<<en
"

* "<<en
"

| |_| |....|__|| -- - | |* * *|

"

|__ |# #| |_| |....|__|| -- -_|_|* * *|

"

| |

| _____ |

____

| |# #| |_| |....| || - -- | _____

[_]| [___] |

* "

_|[] []|_

[_]| _____ |

"
*

[_]| |__|_ ______| |

[_]|

_|_

"

[_]||__
|

-+-

___| |

"

|__| |__|....| || ___|* *|* * *|

|__ #|_______|....| | |* *|* *|* * *|

|__|_______|__ | | |* *|* *|* * *|


__|_____________|__

|* *|* *|* * *|

"<<en
"
"<<en
"

cout<<"

[_]| _____ |

_|___________________|_ |* *|* *|* * *|

"<<en

dl;
cout<<"
| [___] |
|_______________________| ______________ "
<<endl;
cout<<"
__|_______|_________|_______________________| _________________ "
<<endl;
cout<<" |_______________________________________________________________|"
<<endl;
cout<<" |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||"
<<endl;//62
cout<<" ||||||||||||||||||||METROPOLI banco universal||||||||||||||||||||"
<<endl;
cout<<" ||||||||||||Sistema Integral para el Manejo de COLAS|||||||||||||"
<<endl;
cout<<" |||||||||||||||||||||||||||||SIMCOLAS||||||||||||||||||||||||||||"
<<endl;
cout<<" |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||"
<<endl;
cout<<" |||||||||Creado por: Javier Rodriguez Caracas-Venezuela||||||||||"
<<endl;
cout<<" |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||"
<<endl;
cout<<" Login: ";
char usuario[6] = "jahvi";
cin.getline(p->uxer,6);
if (strcmp(p->uxer,usuario) == 0) {
cout<<"Bienvenid@ al sistema "<<endl; menu();
cout<<""<<endl;
}else{
cout<<"Acceso Denegado. Consulte al Admisn
istrador "<<endl;
}
system("PAUSE");
return EXIT_SUCCESS;
}
void menu() {
short a;
do {
cout<<""<<endl;
cout<< "0 - Agregar Cliente"<<endl;
cout<< "1 - Agregar Cliente V.I.P"<<endl;
cout<< "2 - Solicitar Numero"<<endl;
cout<< "3 - Mostrar Cola"<<endl;
cout<< "4 - Mostrar Cola V.I.P"<<endl;
cout<< "5 - Salir del Sistema"<<endl;
cout<<""<<endl;
fflush(stdout);
cout<<"Opcion #:";
cin>>a;
cout<<""<<endl;
if (a == 5)
exit(1);

switch(a){
case 0 :
Insertar();
break;
case 1 :
insertar_vip();
break;
case 2 :
solicitar_numero();
break;
case 3 :
mostrar_cola();
break;
case 4 :
mostrar_colavip();
break;
case 5 :
salir();
break;
default :
puts("Usted no ha selec
cionado nada, porfavor seleccione algo\n");
break;
};
} while (1);
}
void Insertar(){
insertar(&cola_n);
}
void insertar_vip(){
insertar(&cola_vip);
}
void mostrar_cola(){
mostrar_cola(cola_n);
}
void mostrar_colavip(){
mostrar_cola_vip(cola_vip);
}
void solicitar_numero(){
pop(&cola_n);
if(cola_vip!=NULL){
pop_vip(&cola_vip);
}else{
cout<<"No hay cliente V.I.P en
cola ((((((SIMCOLAS))))))"<<endl;
}

}
void salir(){
}

ordenamiento shell
public static void main(String [] args) {
//arreglo
int Entrada[] = {
321, 123, 213, 234, 1, 4, 5, 6, 21, 15
};
//llamada
shellSort(Entrada);
for (int i = 0; i < Entrada.length; i++) {
System.out.print(Entrada[i]+" ");
}
}
public static void shellSort( int vec[]) {
// saltos
for( int p = vec.length / 2; p > 0; p = p == 2 ? 1 : (int) ( p / 2.2 ) ) {
for( int i = p; i < vec.length; i++) {
int tmp = vec[i];
int j;
for(j = i; j >= p && tmp < vec[j - p]; j -= p ) {
vec[j] = vec[j - p];
}
vec[j] = tmp;
}
}
}

Você também pode gostar