public static Lista Merge(Lista listaIzq, Lista listaDer)
        {
            Lista union       = new Lista("Union");
            int   indiceIzq   = 0;
            int   indiceDer   = 0;
            int   cantidadIzq = listaIzq.Cantidad();
            int   cantidadDer = listaDer.Cantidad();

            //Recorremos mientras las dos listas tengan elementos son procesar
            while (indiceIzq < cantidadIzq && indiceDer < cantidadDer)
            {
                if (listaIzq[indiceIzq] <= listaDer[indiceDer])
                {
                    union.Ins(listaIzq[indiceIzq]);
                    indiceIzq++;
                }
                else
                {
                    union.Ins(listaDer[indiceDer]);
                    indiceDer++;
                }
            }

            while (indiceIzq < cantidadIzq)
            {
                union.Ins(listaIzq[indiceIzq]);
                indiceIzq++;
            }

            while (indiceDer < cantidadDer)
            {
                union.Ins(listaDer[indiceDer]);
                indiceDer++;
            }
            return(union);
        }
        static void Main(/*string[] args*/)
        {
            lista1.Ins(5);
            lista1.Ins(6);
            lista1.Ins(6);
            lista1.Ins(4);
            lista1.InsInicio(8);
            lista1.InsInicio(10);
            lista1.InsInicio(6);
            lista1.Ins(2);
            lista1.InsInicio(2);
            lista1.Ver();

            Nodo Encontrado = lista1.Buscar(2);

            WriteLine("\nBusqueda de nodo con info " + Encontrado.info + ": " + Encontrado);
            Nodo anterior = lista1.Anterior(8);

            WriteLine("Anterior de nodo con info " + anterior.Sig + ": " + anterior);
            WriteLine("Nodo con indice: " + lista1[3] + "\n");
            lista1[3] = 55;
            lista1.Ver();
            lista1.Del(2);
            lista1.Ver();

            WriteLine("\nLista de algoritmos para sortear la lista enlazada:");
            WriteLine("1.- Bubble Sort");
            WriteLine("2.- Insertion Sort (Version inline)");
            WriteLine("3.- Selection Sort (Version inline)");
            WriteLine("4.- Merge Sort");
            WriteLine("5.- Quick Sort");


            int cantidad = lista1.Cantidad();
            int desicion = int.Parse(Console.ReadLine());

            switch (desicion)
            {
            case 1:

                //Bubble Sort
                WriteLine("Bubble Sort");
                for (int i = 1; i < cantidad; i++)
                {
                    for (int j = 0; j < cantidad - i; j++)
                    {
                        if (lista1[j] > lista1[j + 1])
                        {
                            Swap(j, j + 1);
                        }
                    }
                }
                lista1.Ver();
                break;

            case 2:
                //Insertion Sort version Inline
                WriteLine("Insertion Sort");
                int posAgujero = 0;

                for (int i = 1; i < cantidad; i++)
                {
                    posAgujero = i;
                    while (posAgujero > 0 && lista1[posAgujero] < lista1[posAgujero - 1])
                    {
                        Swap(posAgujero, posAgujero - 1);
                        posAgujero = posAgujero - 1;
                    }
                }
                lista1.Ver();
                break;

            case 3:
                //Selection Sort version inline
                WriteLine("Selection Sort");
                int indiceMenor = 0;
                for (int i = 0; i < cantidad - 1; i++)
                {
                    indiceMenor = i;
                    for (int j = i + 1; j < cantidad; j++)
                    {
                        if (lista1[j] < lista1[indiceMenor])
                        {
                            indiceMenor = j;
                        }
                    }
                    Swap(i, indiceMenor);
                }
                lista1.Ver();
                break;

            case 4:
                //Merge Sort
                WriteLine("Merge Sort");
                Lista lista2 = MergeSort(lista1);
                lista2.Ver();
                break;

            case 5:
                //Quick Sort
                WriteLine("Quick Sort");
                QuickSort(0, lista1.Cantidad() - 1);
                lista1.Ver();
                break;

            default:
                MainHandler MainDelegate = new MainHandler(Main);
                MainDelegate.Invoke();
                break;
            }
        }