﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing;

namespace Metodos_de_Ordenamiento
{
    class Intercalación_Binaria
    {
        Control ctrl;
        public Intercalación_Binaria()
        {
        }

        public Intercalación_Binaria(Graphics grafica, TextBox txb1, TextBox txb2, ListBox lisbx,
            int tiempo, int[] arreglo, Rectangle[] pilares, float pixelxpilar, bool compara)
        {
            ctrl = new Control(grafica, txb1, txb2, lisbx,
            tiempo, arreglo, pilares, pixelxpilar, compara);
        }

        public Intercalación_Binaria(Graphics grafica, TextBox txb1, TextBox txb2,
            int tiempo, int[] arreglo, Rectangle[] pilares, float pixelxpilar, bool compara)
        {
            ctrl = new Control(grafica, txb1, txb2,
            tiempo, arreglo, pilares, pixelxpilar, compara);
        }

        public Intercalación_Binaria(Graphics grafica, int tiempo, int[] arreglo, Rectangle[] pilares, float pixelxpilar)
        {
            ctrl = new Control(grafica, tiempo, arreglo, pilares, pixelxpilar);
        }


        public void IntercalaciónBinaria(int[] V, int n)//0
        {//1
            ctrl.Recorrer(0, 3);
            int i, j, aux, izq, der, m;//2
            for (i = 1; i < n; i++)//3
            {//4
                ctrl.Recorrer(4, 8);
                aux = V[i];//5
                izq = 0;//6
                der = i - 1;//7
                while (izq <= der)//8
                {//9
                    ctrl.Recorrer(9, 11);
                    m = ((izq + der) / 2);//10
                    if (aux < V[m])//11
                    {//12
                        ctrl.Recorrer(12, 14);
                        der = m - 1;//13
                    }//14
                    else//15
                    {//16
                        ctrl.Recorrer(15, 18);
                        izq = m + 1;//17
                    }//18
                    ctrl.Recorrer(19, 19, 8);
                }//19
                ctrl.Recorrer(20, 21);
                j = i - 1;//20
                ctrl.Comparación(j, izq);
                while (j >= izq)//21
                {//22
                    ctrl.Recorrer(22, 23);
                    V[j + 1] = V[j];//23
                    ctrl.Intercambiosolo(j + 1, V[j]);
                    j = j - 1;//24
                    ctrl.Recorrer(24, 25, 21, j, izq);
                }//25
                ctrl.AvanzaSelect(26);
                V[izq] = aux;//26
                ctrl.Intercambiosolo(izq, aux);
                ctrl.Recorrer(27, 27, 3);
            }//27
            ctrl.AvanzaSelect(28);
        }//28
    }
}
