Added merge sort and fixed some typos.
This commit is contained in:
parent
0c9575cf04
commit
6a5ed22633
BIN
diagram.png
BIN
diagram.png
Binary file not shown.
Before Width: | Height: | Size: 158 KiB After Width: | Height: | Size: 195 KiB |
269
diagrama.uml
269
diagrama.uml
@ -3,80 +3,49 @@
|
||||
<ID>JAVA</ID>
|
||||
<OriginalElement />
|
||||
<nodes>
|
||||
<node x="3677.083333333333" y="684.5">cl.cromer.estructuras.InsercionController</node>
|
||||
<node x="2336.083333333333" y="684.5">cl.cromer.estructuras.BurbujaController</node>
|
||||
<node x="3225.083333333333" y="684.5">cl.cromer.estructuras.SeleccionController</node>
|
||||
<node x="44.87500000000023" y="642.5">cl.cromer.estructuras.PilaController</node>
|
||||
<node x="0.0" y="1064.0">cl.cromer.estructuras.Logs</node>
|
||||
<node x="2812.083333333333" y="228.0">cl.cromer.estructuras.Array</node>
|
||||
<node x="1221.6666666666667" y="642.5">cl.cromer.estructuras.ColaController</node>
|
||||
<node x="0.0" y="270.5">cl.cromer.estructuras.Pila</node>
|
||||
<node x="1965.0" y="0.0">cl.cromer.estructuras.Colores</node>
|
||||
<node x="1368.8750000000002" y="218.0">cl.cromer.estructuras.Grafico</node>
|
||||
<node x="713.8750000000002" y="280.5">cl.cromer.estructuras.TextFieldLimited</node>
|
||||
<node x="1777.0833333333335" y="632.0">cl.cromer.estructuras.ArrayController</node>
|
||||
<node x="573.8750000000002" y="790.0">cl.cromer.estructuras.TextFieldLimited.StyleableProperties</node>
|
||||
<node x="5.5" y="1229.0">cl.cromer.estructuras.Main</node>
|
||||
<node x="1077.8750000000002" y="270.5">cl.cromer.estructuras.Cola</node>
|
||||
<node x="2776.083333333333" y="663.5">cl.cromer.estructuras.MenuController</node>
|
||||
<node x="2350.083333333334" y="842.5">cl.cromer.estructuras.InsercionController</node>
|
||||
<node x="3788.083333333334" y="842.5">cl.cromer.estructuras.ShellController</node>
|
||||
<node x="2799.083333333334" y="842.5">cl.cromer.estructuras.BurbujaController</node>
|
||||
<node x="4662.083333333334" y="842.5">cl.cromer.estructuras.QuickController</node>
|
||||
<node x="44.875000000000455" y="800.5">cl.cromer.estructuras.PilaController</node>
|
||||
<node x="4210.083333333334" y="842.5">cl.cromer.estructuras.SeleccionController</node>
|
||||
<node x="0.0" y="1243.0">cl.cromer.estructuras.Logs</node>
|
||||
<node x="3255.083333333334" y="238.0">cl.cromer.estructuras.Array</node>
|
||||
<node x="573.8750000000007" y="800.5">cl.cromer.estructuras.ColaController</node>
|
||||
<node x="0.0" y="354.0">cl.cromer.estructuras.Pila</node>
|
||||
<node x="2295.083333333334" y="0.0">cl.cromer.estructuras.Colores</node>
|
||||
<node x="749.0833333333339" y="301.5">cl.cromer.estructuras.Grafico</node>
|
||||
<node x="3358.583333333334" y="32.5">cl.cromer.estructuras.Array.ParticionarResult</node>
|
||||
<node x="1287.083333333334" y="364.0">cl.cromer.estructuras.TextFieldLimited</node>
|
||||
<node x="1791.083333333334" y="790.0">cl.cromer.estructuras.ArrayController</node>
|
||||
<node x="1355.083333333334" y="948.0">cl.cromer.estructuras.TextFieldLimited.StyleableProperties</node>
|
||||
<node x="5.5" y="1408.0">cl.cromer.estructuras.Main</node>
|
||||
<node x="457.08333333333394" y="354.0">cl.cromer.estructuras.Cola</node>
|
||||
<node x="3239.083333333334" y="769.0">cl.cromer.estructuras.MenuController</node>
|
||||
</nodes>
|
||||
<notes />
|
||||
<edges>
|
||||
<edge source="cl.cromer.estructuras.ColaController" target="cl.cromer.estructuras.TextFieldLimited">
|
||||
<point x="-214.16666666666674" y="-183.0" />
|
||||
<point x="1264.5" y="592.0" />
|
||||
<point x="954.6750000000002" y="592.0" />
|
||||
<point x="68.79999999999995" y="89.5" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.PilaController" target="cl.cromer.estructuras.TextFieldLimited">
|
||||
<point x="42.41666666666674" y="-183.0" />
|
||||
<point x="341.79166666666697" y="582.0" />
|
||||
<point x="748.2750000000003" y="582.0" />
|
||||
<point x="-137.5999999999999" y="89.5" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.ColaController" target="cl.cromer.estructuras.Cola">
|
||||
<point x="-128.5" y="-183.0" />
|
||||
<point x="1350.1666666666667" y="582.0" />
|
||||
<point x="1145.6250000000002" y="582.0" />
|
||||
<point x="-67.75" y="99.5" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.ArrayController" target="cl.cromer.estructuras.TextFieldLimited">
|
||||
<point x="-224.58333333333326" y="-193.5" />
|
||||
<point x="1822.0" y="562.0" />
|
||||
<point x="1023.4750000000001" y="562.0" />
|
||||
<point x="137.5999999999999" y="89.5" />
|
||||
<point x="212.08333333333326" y="-183.0" />
|
||||
<point x="511.4583333333337" y="739.0" />
|
||||
<point x="1321.483333333334" y="739.0" />
|
||||
<point x="-137.6" y="89.5" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.PilaController" target="cl.cromer.estructuras.Colores">
|
||||
<point x="-42.41666666666674" y="-183.0" />
|
||||
<point x="256.9583333333335" y="612.0" />
|
||||
<point x="277.5" y="612.0" />
|
||||
<point x="277.5" y="178.0" />
|
||||
<point x="1983.0714285714284" y="178.0" />
|
||||
<point x="-108.42857142857156" y="79.0" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.ArrayController" target="cl.cromer.estructuras.Colores">
|
||||
<point x="44.916666666666686" y="-193.5" />
|
||||
<point x="0.0" y="79.0" />
|
||||
<point x="-42.416666666666515" y="-183.0" />
|
||||
<point x="256.95833333333394" y="749.0" />
|
||||
<point x="277.5" y="749.0" />
|
||||
<point x="277.5" y="188.0" />
|
||||
<point x="2309.1388888888896" y="188.0" />
|
||||
<point x="-112.44444444444434" y="79.0" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.InsercionController" target="cl.cromer.estructuras.Colores">
|
||||
<point x="143.0" y="-141.0" />
|
||||
<point x="4034.583333333333" y="572.0" />
|
||||
<point x="3853.652380952381" y="572.0" />
|
||||
<point x="3853.652380952381" y="178.0" />
|
||||
<point x="2199.9285714285716" y="178.0" />
|
||||
<point x="108.42857142857133" y="79.0" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.ColaController" target="cl.cromer.estructuras.Colores">
|
||||
<point x="214.16666666666674" y="-183.0" />
|
||||
<point x="1692.8333333333335" y="612.0" />
|
||||
<point x="1950.4023809523812" y="612.0" />
|
||||
<point x="1950.4023809523812" y="198.0" />
|
||||
<point x="2055.357142857143" y="198.0" />
|
||||
<point x="-36.14285714285711" y="79.0" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.MenuController" target="cl.cromer.estructuras.Array">
|
||||
<point x="0.0" y="-162.0" />
|
||||
<point x="-2.8421709430404007E-14" y="142.0" />
|
||||
<point x="-143.0" y="-141.0" />
|
||||
<point x="2421.583333333334" y="689.0" />
|
||||
<point x="2476.23047008547" y="689.0" />
|
||||
<point x="2476.23047008547" y="218.0" />
|
||||
<point x="2421.583333333334" y="218.0" />
|
||||
<point x="0.0" y="79.0" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.Main" target="cl.cromer.estructuras.Logs">
|
||||
<point x="0.0" y="-46.5" />
|
||||
@ -84,78 +53,154 @@
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.SeleccionController" target="cl.cromer.estructuras.Array">
|
||||
<point x="0.0" y="-141.0" />
|
||||
<point x="3441.083333333333" y="602.0" />
|
||||
<point x="3069.9166666666665" y="602.0" />
|
||||
<point x="79.33333333333326" y="142.0" />
|
||||
<point x="4426.083333333334" y="719.0" />
|
||||
<point x="3656.506410256411" y="719.0" />
|
||||
<point x="152.9230769230769" y="215.5" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.BurbujaController" target="cl.cromer.estructuras.Array">
|
||||
<point x="140.0" y="-141.0" />
|
||||
<point x="2686.083333333333" y="612.0" />
|
||||
<point x="2950.9166666666665" y="612.0" />
|
||||
<point x="-39.666666666666686" y="142.0" />
|
||||
<point x="3149.083333333334" y="749.0" />
|
||||
<point x="3465.3525641025644" y="749.0" />
|
||||
<point x="-38.230769230769255" y="215.5" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.Array.ParticionarResult" target="cl.cromer.estructuras.Array">
|
||||
<point x="72.5" y="46.5" />
|
||||
<point x="3576.083333333334" y="218.0" />
|
||||
<point x="3627.833333333334" y="218.0" />
|
||||
<point x="124.25" y="-215.5" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.ArrayController" target="cl.cromer.estructuras.Array">
|
||||
<point x="224.58333333333326" y="-193.5" />
|
||||
<point x="2285.1666666666674" y="709.0" />
|
||||
<point x="3312.4294871794878" y="709.0" />
|
||||
<point x="-191.1538461538462" y="215.5" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.ShellController" target="cl.cromer.estructuras.Colores">
|
||||
<point x="134.0" y="-141.0" />
|
||||
<point x="4123.083333333334" y="198.0" />
|
||||
<point x="2477.805555555556" y="198.0" />
|
||||
<point x="56.22222222222217" y="79.0" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.Grafico" target="cl.cromer.estructuras.Colores">
|
||||
<point x="0.0" y="-152.0" />
|
||||
<point x="1008.0833333333339" y="208.0" />
|
||||
<point x="2365.3611111111118" y="208.0" />
|
||||
<point x="-56.22222222222217" y="79.0" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.ArrayController" target="cl.cromer.estructuras.Grafico">
|
||||
<point x="-134.75" y="-193.5" />
|
||||
<point x="1925.833333333334" y="719.0" />
|
||||
<point x="1223.9166666666672" y="719.0" />
|
||||
<point x="215.83333333333326" y="152.0" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.ColaController" target="cl.cromer.estructuras.TextFieldLimited">
|
||||
<point x="214.16666666666669" y="-183.0" />
|
||||
<point x="1045.0416666666674" y="749.0" />
|
||||
<point x="1390.283333333334" y="749.0" />
|
||||
<point x="-68.79999999999998" y="89.5" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.QuickController" target="cl.cromer.estructuras.Array">
|
||||
<point x="-135.33333333333337" y="-141.0" />
|
||||
<point x="4729.75" y="709.0" />
|
||||
<point x="3694.73717948718" y="709.0" />
|
||||
<point x="191.15384615384613" y="215.5" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.QuickController" target="cl.cromer.estructuras.Colores">
|
||||
<point x="135.33333333333348" y="-141.0" />
|
||||
<point x="5000.416666666668" y="689.0" />
|
||||
<point x="4730.603341880343" y="689.0" />
|
||||
<point x="4730.603341880343" y="178.0" />
|
||||
<point x="2534.0277777777783" y="178.0" />
|
||||
<point x="112.44444444444457" y="79.0" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.ColaController" target="cl.cromer.estructuras.Cola">
|
||||
<point x="-214.16666666666674" y="-183.0" />
|
||||
<point x="616.7083333333339" y="689.0" />
|
||||
<point x="524.8333333333339" y="689.0" />
|
||||
<point x="-67.75" y="99.5" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.ArrayController" target="cl.cromer.estructuras.TextFieldLimited">
|
||||
<point x="-44.916666666666515" y="-193.5" />
|
||||
<point x="2015.6666666666674" y="709.0" />
|
||||
<point x="1596.6833333333338" y="709.0" />
|
||||
<point x="137.60000000000002" y="89.5" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.ShellController" target="cl.cromer.estructuras.Array">
|
||||
<point x="0.0" y="-141.0" />
|
||||
<point x="3989.083333333334" y="739.0" />
|
||||
<point x="3580.0448717948725" y="739.0" />
|
||||
<point x="76.46153846153845" y="215.5" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.ArrayController" target="cl.cromer.estructuras.Colores">
|
||||
<point x="44.91666666666674" y="-193.5" />
|
||||
<point x="2105.500000000001" y="218.0" />
|
||||
<point x="2393.4722222222226" y="218.0" />
|
||||
<point x="-28.111111111111086" y="79.0" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.MenuController" target="cl.cromer.estructuras.Array">
|
||||
<point x="0.0" y="-214.5" />
|
||||
<point x="-2.8421709430404007E-14" y="215.5" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.ColaController" target="cl.cromer.estructuras.Colores">
|
||||
<point x="-42.83333333333326" y="-183.0" />
|
||||
<point x="788.0416666666674" y="689.0" />
|
||||
<point x="738.5833333333339" y="689.0" />
|
||||
<point x="738.5833333333339" y="198.0" />
|
||||
<point x="2337.250000000001" y="198.0" />
|
||||
<point x="-84.33333333333326" y="79.0" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.SeleccionController" target="cl.cromer.estructuras.Colores">
|
||||
<point x="144.0" y="-141.0" />
|
||||
<point x="3585.083333333333" y="188.0" />
|
||||
<point x="2163.785714285714" y="188.0" />
|
||||
<point x="72.28571428571422" y="79.0" />
|
||||
<point x="4570.083333333334" y="749.0" />
|
||||
<point x="4509.936675213676" y="749.0" />
|
||||
<point x="4509.936675213676" y="188.0" />
|
||||
<point x="2505.9166666666674" y="188.0" />
|
||||
<point x="84.33333333333348" y="79.0" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.PilaController" target="cl.cromer.estructuras.Pila">
|
||||
<point x="-212.08333333333326" y="-183.0" />
|
||||
<point x="87.29166666666697" y="612.0" />
|
||||
<point x="66.75" y="612.0" />
|
||||
<point x="87.29166666666697" y="749.0" />
|
||||
<point x="66.75" y="749.0" />
|
||||
<point x="-66.75" y="99.5" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.BurbujaController" target="cl.cromer.estructuras.Colores">
|
||||
<point x="-140.0" y="-141.0" />
|
||||
<point x="2406.083333333333" y="198.0" />
|
||||
<point x="2127.6428571428573" y="198.0" />
|
||||
<point x="36.14285714285711" y="79.0" />
|
||||
<point x="2869.083333333334" y="208.0" />
|
||||
<point x="2449.6944444444453" y="208.0" />
|
||||
<point x="28.111111111111086" y="79.0" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.Array" target="cl.cromer.estructuras.Array.ParticionarResult">
|
||||
<point x="-124.25" y="-215.5" />
|
||||
<point x="3379.333333333334" y="218.0" />
|
||||
<point x="3431.083333333334" y="218.0" />
|
||||
<point x="-72.5" y="46.5" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.InsercionController" target="cl.cromer.estructuras.Array">
|
||||
<point x="-143.0" y="-141.0" />
|
||||
<point x="3748.583333333333" y="592.0" />
|
||||
<point x="3109.583333333333" y="592.0" />
|
||||
<point x="118.99999999999989" y="142.0" />
|
||||
<point x="143.0" y="-141.0" />
|
||||
<point x="2707.583333333334" y="729.0" />
|
||||
<point x="3388.8910256410263" y="729.0" />
|
||||
<point x="-114.69230769230771" y="215.5" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.ColaController" target="cl.cromer.estructuras.Grafico">
|
||||
<point x="42.83333333333326" y="-183.0" />
|
||||
<point x="1521.5" y="612.0" />
|
||||
<point x="1584.7083333333335" y="612.0" />
|
||||
<point x="42.833333333333314" y="-183.0" />
|
||||
<point x="873.7083333333339" y="719.0" />
|
||||
<point x="964.9166666666672" y="719.0" />
|
||||
<point x="-43.16666666666674" y="152.0" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.ArrayController" target="cl.cromer.estructuras.Array">
|
||||
<point x="224.58333333333331" y="-193.5" />
|
||||
<point x="2271.1666666666665" y="592.0" />
|
||||
<point x="2871.583333333333" y="592.0" />
|
||||
<point x="-119.0" y="142.0" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.TextFieldLimited.StyleableProperties" target="cl.cromer.estructuras.TextFieldLimited">
|
||||
<point x="104.0" y="-35.5" />
|
||||
<point x="0.0" y="89.5" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.Grafico" target="cl.cromer.estructuras.Colores">
|
||||
<point x="0.0" y="-152.0" />
|
||||
<point x="1627.8750000000002" y="188.0" />
|
||||
<point x="2019.2142857142858" y="188.0" />
|
||||
<point x="-72.28571428571422" y="79.0" />
|
||||
<point x="-104.0" y="-35.5" />
|
||||
<point x="2.8421709430404007E-14" y="89.5" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.PilaController" target="cl.cromer.estructuras.Grafico">
|
||||
<point x="127.25" y="-183.0" />
|
||||
<point x="426.6250000000002" y="602.0" />
|
||||
<point x="1412.041666666667" y="602.0" />
|
||||
<point x="42.41666666666663" y="-183.0" />
|
||||
<point x="341.79166666666697" y="699.0" />
|
||||
<point x="792.2500000000007" y="699.0" />
|
||||
<point x="-215.83333333333326" y="152.0" />
|
||||
</edge>
|
||||
<edge source="cl.cromer.estructuras.ArrayController" target="cl.cromer.estructuras.Grafico">
|
||||
<point x="-134.74999999999994" y="-193.5" />
|
||||
<point x="1911.8333333333335" y="552.0" />
|
||||
<point x="1757.3750000000002" y="552.0" />
|
||||
<point x="129.5" y="152.0" />
|
||||
</edge>
|
||||
</edges>
|
||||
<settings layout="Hierarchic Group" zoom="0.7670220499151925" x="708.3626599273417" y="461.0925604169958" />
|
||||
<settings layout="Hierarchic Group" zoom="0.21654549027313813" x="2534.5" y="750.5" />
|
||||
<SelectedNodes>
|
||||
<node>cl.cromer.estructuras.SeleccionController</node>
|
||||
<node>cl.cromer.estructuras.InsercionController</node>
|
||||
</SelectedNodes>
|
||||
<Categories>
|
||||
<Category>Fields</Category>
|
||||
|
@ -22,10 +22,10 @@ public class Array {
|
||||
|
||||
/**
|
||||
* Crear el array con el tamaño pasador por argumento.
|
||||
* @param temano int: El temaño del array a crear.
|
||||
* @param tamano int: El tamaño del array a crear.
|
||||
*/
|
||||
public Array(int temano) {
|
||||
this.array = new String[temano];
|
||||
public Array(int tamano) {
|
||||
this.array = new String[tamano];
|
||||
size = 0;
|
||||
ordered = false;
|
||||
}
|
||||
@ -367,4 +367,97 @@ public class Array {
|
||||
return punteroIzquerda;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Ordenar el array usando merge.
|
||||
* @param paso boolean: Si es verdad, solo hago en paso del ordenamiento, sino ordenear todos los elementos.
|
||||
* @return boolean: Verdad si algo cambió, sino falso.
|
||||
*/
|
||||
public boolean merge(boolean paso) {
|
||||
String array[] = this.array.clone();
|
||||
boolean cambio = false;
|
||||
boolean cambio2;
|
||||
String[] temp = new String[size()];
|
||||
cambio2 = recurenciaMerge(temp, 0, size() - 1, paso);
|
||||
for (int i = 0; i < size(); i++) {
|
||||
if (!array[i].equals(this.array[i])) {
|
||||
cambio = true;
|
||||
}
|
||||
}
|
||||
return (cambio || cambio2);
|
||||
}
|
||||
|
||||
/**
|
||||
* El metodo recursivo para ordenar con merge.
|
||||
* @param temp String[]: El array temporario para trabajar.
|
||||
* @param izquerda int: El lado izquerda.
|
||||
* @param derecha int: El lado derecha.
|
||||
* @param paso boolean: Verdad si es paso por paso.
|
||||
* @return boolean: Devolver si algo cambió.
|
||||
*/
|
||||
private boolean recurenciaMerge(String[] temp, int izquerda, int derecha, boolean paso) {
|
||||
if (izquerda != derecha) {
|
||||
boolean cambio;
|
||||
boolean cambio2;
|
||||
boolean cambio3;
|
||||
|
||||
int medio = (izquerda + derecha) / 2;
|
||||
cambio = recurenciaMerge(temp, izquerda, medio, paso);
|
||||
if (paso && cambio) {
|
||||
return true;
|
||||
}
|
||||
cambio2 = recurenciaMerge(temp, medio + 1, derecha, paso);
|
||||
if (paso && cambio2) {
|
||||
return true;
|
||||
}
|
||||
cambio3 = merge(temp, izquerda, medio + 1, derecha, paso);
|
||||
return (paso && cambio3);
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Este metodo hace los cambios al array.
|
||||
* @param temp String[]: El array temporario para trabajar.
|
||||
* @param prevIzquerda int: El valor previo de la izquerda.
|
||||
* @param prevMedio int: El valor previo al medio.
|
||||
* @param prevDerecha int: El valor previo de la derecha.
|
||||
* @param paso boolean: Si es paso por paso.
|
||||
* @return boolean: Devolver si algo cambió.
|
||||
*/
|
||||
private boolean merge(String[] temp, int prevIzquerda, int prevMedio, int prevDerecha, boolean paso) {
|
||||
boolean cambio = false;
|
||||
int j = 0;
|
||||
int izquerda = prevIzquerda;
|
||||
int medio = prevMedio - 1;
|
||||
int derecha = prevDerecha - izquerda + 1;
|
||||
|
||||
while (prevIzquerda <= medio && prevMedio <= prevDerecha) {
|
||||
if (Integer.valueOf(array[prevIzquerda]) < Integer.valueOf(array[prevMedio])) {
|
||||
temp[j++] = array[prevIzquerda++];
|
||||
}
|
||||
else {
|
||||
temp[j++] = array[prevMedio++];
|
||||
}
|
||||
}
|
||||
|
||||
while (prevIzquerda <= medio) {
|
||||
temp[j++] = array[prevIzquerda++];
|
||||
}
|
||||
|
||||
while (prevMedio <= prevDerecha) {
|
||||
temp[j++] = array[prevMedio++];
|
||||
}
|
||||
|
||||
for (j = 0; j < derecha; j++) {
|
||||
String temp2 = array[izquerda + j];
|
||||
array[izquerda + j] = temp[j];
|
||||
if (paso && !array[izquerda + j].equals(temp2)) {
|
||||
cambio = true;
|
||||
}
|
||||
}
|
||||
return cambio;
|
||||
}
|
||||
}
|
||||
|
@ -259,7 +259,7 @@ public class ArrayController implements Initializable {
|
||||
}
|
||||
|
||||
/**
|
||||
* Crear el array de temaño 10. La scene está usado para saber si es de tipo ordenado o simple segun el ménu.
|
||||
* Crear el array de tamaño 10. La scene está usado para saber si es de tipo ordenado o simple segun el ménu.
|
||||
*/
|
||||
private void initializeArray() {
|
||||
scene = contenidoArray.getScene();
|
||||
|
@ -156,7 +156,7 @@ public class BurbujaController implements Initializable {
|
||||
}
|
||||
|
||||
/**
|
||||
* Crear el array de temaño 10.
|
||||
* Crear el array de tamaño 10.
|
||||
*/
|
||||
private void initializeScene() {
|
||||
scene = contenidoBurbuja.getScene();
|
||||
|
@ -156,7 +156,7 @@ public class InsercionController implements Initializable {
|
||||
}
|
||||
|
||||
/**
|
||||
* Crear el array de temaño 10.
|
||||
* Crear el array de tamaño 10.
|
||||
*/
|
||||
private void initializeScene() {
|
||||
scene = contenidoInsercion.getScene();
|
||||
|
@ -107,7 +107,7 @@ public class MenuController extends VBox implements Initializable {
|
||||
}
|
||||
|
||||
/**
|
||||
* Click en Selecion.
|
||||
* Click en Shell.
|
||||
*/
|
||||
@FXML
|
||||
protected void menuShell() {
|
||||
@ -119,14 +119,26 @@ public class MenuController extends VBox implements Initializable {
|
||||
}
|
||||
|
||||
/**
|
||||
* Click en Selecion.
|
||||
* Click en Quick.
|
||||
*/
|
||||
@FXML
|
||||
protected void menuQuick() {
|
||||
loadStage(
|
||||
resourceBundle.getString("tituloQuick"),
|
||||
"/cl/cromer/estructuras/fxml/quick.fxml",
|
||||
"/cl/cromer/estructuras/css/style.css"
|
||||
resourceBundle.getString("tituloQuick"),
|
||||
"/cl/cromer/estructuras/fxml/quick.fxml",
|
||||
"/cl/cromer/estructuras/css/style.css"
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Click en Merge.
|
||||
*/
|
||||
@FXML
|
||||
protected void menuMerge() {
|
||||
loadStage(
|
||||
resourceBundle.getString("tituloMerge"),
|
||||
"/cl/cromer/estructuras/fxml/merge.fxml",
|
||||
"/cl/cromer/estructuras/css/style.css"
|
||||
);
|
||||
}
|
||||
|
||||
|
174
src/cl/cromer/estructuras/MergeController.java
Normal file
174
src/cl/cromer/estructuras/MergeController.java
Normal file
@ -0,0 +1,174 @@
|
||||
package cl.cromer.estructuras;
|
||||
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.fxml.Initializable;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.control.ButtonBar;
|
||||
import javafx.scene.control.ButtonType;
|
||||
import javafx.scene.control.Dialog;
|
||||
import javafx.scene.layout.HBox;
|
||||
import javafx.scene.text.Text;
|
||||
|
||||
import java.net.URL;
|
||||
import java.util.Random;
|
||||
import java.util.ResourceBundle;
|
||||
import java.util.Scanner;
|
||||
|
||||
/**
|
||||
* Esta clase es para controlar todos la interfaz de Merge.
|
||||
* @author Chris Cromer
|
||||
*/
|
||||
public class MergeController implements Initializable {
|
||||
/**
|
||||
* Donde poner el contenido de array.
|
||||
*/
|
||||
@FXML private HBox contenidoMerge;
|
||||
|
||||
/**
|
||||
* Donde va el codigo a mostrar a la pantalla.
|
||||
*/
|
||||
@FXML private Text codigoMerge;
|
||||
|
||||
/**
|
||||
* La escena donde está cosas graficas.
|
||||
*/
|
||||
private Scene scene;
|
||||
|
||||
/**
|
||||
* Donde está guardado los idiomas.
|
||||
*/
|
||||
private ResourceBundle resourceBundle;
|
||||
|
||||
/**
|
||||
* El array usado en la aplicación.
|
||||
*/
|
||||
private Array array;
|
||||
|
||||
/**
|
||||
* Inicializar todos los datos y dibujar las graficas.
|
||||
* @param location URL: El URL de fxml en uso.
|
||||
* @param resourceBundle ResourceBundle: Tiene datos de idioma.
|
||||
*/
|
||||
@Override
|
||||
public void initialize(URL location, ResourceBundle resourceBundle) {
|
||||
this.resourceBundle = resourceBundle;
|
||||
|
||||
scene = null;
|
||||
|
||||
Colores colores = new Colores();
|
||||
|
||||
Random random = new Random();
|
||||
int maximo = 99;
|
||||
int minimo = 0;
|
||||
int rango = maximo - minimo + 1;
|
||||
|
||||
array = new Array(10);
|
||||
array.setOrdered(true);
|
||||
|
||||
for (int i = 0; i < 10; i++) {
|
||||
int numero = random.nextInt(rango) + minimo;
|
||||
while (array.buscar(numero) != -1) {
|
||||
numero = random.nextInt(rango) + minimo;
|
||||
}
|
||||
array.insertar(numero);
|
||||
contenidoMerge.getChildren().addAll(Grafico.crearCaja(colores, String.valueOf(i), String.valueOf(numero)));
|
||||
colores.siguinteColor();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Crear un array nuevo.
|
||||
*/
|
||||
@FXML
|
||||
protected void botonNuevo() {
|
||||
if (scene == null) {
|
||||
initializeScene();
|
||||
}
|
||||
|
||||
array = new Array(10);
|
||||
array.setOrdered(true);
|
||||
|
||||
Random random = new Random();
|
||||
int maximo = 99;
|
||||
int minimo = 0;
|
||||
int rango = maximo - minimo + 1;
|
||||
|
||||
for (int i = array.size(); i < 10; i++) {
|
||||
int numero = random.nextInt(rango) + minimo;
|
||||
while (array.buscar(numero) != -1) {
|
||||
numero = random.nextInt(rango) + minimo;
|
||||
}
|
||||
array.insertar(numero);
|
||||
}
|
||||
generarGrafico();
|
||||
}
|
||||
|
||||
/**
|
||||
* Ordenarlo paso por paso.
|
||||
*/
|
||||
@FXML
|
||||
protected void botonPaso() {
|
||||
if (scene == null) {
|
||||
initializeScene();
|
||||
}
|
||||
|
||||
// Mostrar el codigo
|
||||
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/merge/ordenar")).useDelimiter("\\Z").next();
|
||||
codigoMerge.setText(codigoTexto);
|
||||
|
||||
if (!array.merge(true)) {
|
||||
errorYaOrdenado();
|
||||
}
|
||||
|
||||
generarGrafico();
|
||||
}
|
||||
|
||||
/**
|
||||
* Ordenarlo completamente.
|
||||
*/
|
||||
@FXML
|
||||
protected void botonCorrer() {
|
||||
if (scene == null) {
|
||||
initializeScene();
|
||||
}
|
||||
|
||||
// Mostrar el codigo
|
||||
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/merge/ordenar")).useDelimiter("\\Z").next();
|
||||
codigoMerge.setText(codigoTexto);
|
||||
|
||||
if (!array.merge(false)) {
|
||||
errorYaOrdenado();
|
||||
}
|
||||
|
||||
generarGrafico();
|
||||
}
|
||||
|
||||
/**
|
||||
* Se muestra un error si el array ya está ordenado.
|
||||
*/
|
||||
private void errorYaOrdenado() {
|
||||
ButtonType botonCerrar = new ButtonType(resourceBundle.getString("cerrar"), ButtonBar.ButtonData.OK_DONE);
|
||||
Dialog<String> dialog = new Dialog<>();
|
||||
dialog.setTitle(resourceBundle.getString("error"));
|
||||
dialog.setContentText(resourceBundle.getString("mergeYaOrdenado"));
|
||||
dialog.getDialogPane().getButtonTypes().add(botonCerrar);
|
||||
dialog.show();
|
||||
}
|
||||
|
||||
/**
|
||||
* Crear el array de tamaño 10.
|
||||
*/
|
||||
private void initializeScene() {
|
||||
scene = contenidoMerge.getScene();
|
||||
}
|
||||
|
||||
/**
|
||||
* Poner los valores en el grafico.
|
||||
*/
|
||||
private void generarGrafico() {
|
||||
for (int i = 0; i < 10; i++) {
|
||||
Text text = (Text) scene.lookup("#caja_" + String.valueOf(i));
|
||||
text.setText(array.getIndice(i));
|
||||
}
|
||||
}
|
||||
}
|
@ -156,7 +156,7 @@ public class QuickController implements Initializable {
|
||||
}
|
||||
|
||||
/**
|
||||
* Crear el array de temaño 10.
|
||||
* Crear el array de tamaño 10.
|
||||
*/
|
||||
private void initializeScene() {
|
||||
scene = contenidoQuick.getScene();
|
||||
|
@ -156,7 +156,7 @@ public class SeleccionController implements Initializable {
|
||||
}
|
||||
|
||||
/**
|
||||
* Crear el array de temaño 10.
|
||||
* Crear el array de tamaño 10.
|
||||
*/
|
||||
private void initializeScene() {
|
||||
scene = contenidoSeleccion.getScene();
|
||||
|
@ -156,7 +156,7 @@ public class ShellController implements Initializable {
|
||||
}
|
||||
|
||||
/**
|
||||
* Crear el array de temaño 10.
|
||||
* Crear el array de tamaño 10.
|
||||
*/
|
||||
private void initializeScene() {
|
||||
scene = contenidoShell.getScene();
|
||||
|
@ -8,6 +8,7 @@ tituloInsercion=Insertion
|
||||
tituloSeleccion=Selection
|
||||
tituloShell=Shell
|
||||
tituloQuick=Quick
|
||||
tituloMerge=Merge
|
||||
|
||||
estructuras=Structures
|
||||
array=Array
|
||||
@ -19,6 +20,7 @@ insercion=Insertion
|
||||
seleccion=Selection
|
||||
shell=Shell
|
||||
quick=Quick
|
||||
merge=merge
|
||||
listaEnlazada=Linked List
|
||||
listaSimple=Simple
|
||||
listaCircular=Circular
|
||||
@ -81,6 +83,8 @@ shellYaOrdenado=The array is already sorted.
|
||||
|
||||
quickYaOrdenado=The array is already sorted.
|
||||
|
||||
mergeYaOrdenado=The array is already sorted.
|
||||
|
||||
pilaLlena=Value not inserted because the stack is full.
|
||||
pilaVacia=The stack is empty.
|
||||
pilaNoValor=Please input a numeric value.
|
||||
|
@ -8,6 +8,7 @@ tituloInsercion=Inserci\u00F3n
|
||||
tituloSeleccion=Selecci\u00F3n
|
||||
tituloShell=Shell
|
||||
tituloQuick=Quick
|
||||
tituloMerge=Merge
|
||||
|
||||
estructuras=Estructuras
|
||||
array=Array
|
||||
@ -19,6 +20,7 @@ insercion=Inserci\u00F3n
|
||||
seleccion=Seleci\u00F3n
|
||||
shell=Shell
|
||||
quick=Quick
|
||||
merge=Merge
|
||||
listaEnlazada=Lista Enlazada
|
||||
listaSimple=Simple
|
||||
listaCircular=Circular
|
||||
@ -81,6 +83,8 @@ shellYaOrdenado=El array ya est\u00E1 ordenado.
|
||||
|
||||
quickYaOrdenado=El array ya est\u00E1 ordenado.
|
||||
|
||||
mergeYaOrdenado=El array ya est\u00E1 ordenado.
|
||||
|
||||
pilaLlena=Valor no fue insertado porque la pila est\u00E1 llena.
|
||||
pilaVacia=La pila est\u00E1 vac\u00EDa.
|
||||
pilaNoValor=Ingresar un valor num\u00E9rico por favor.
|
||||
|
50
src/cl/cromer/estructuras/code/merge/ordenar
Normal file
50
src/cl/cromer/estructuras/code/merge/ordenar
Normal file
@ -0,0 +1,50 @@
|
||||
public void merge() {
|
||||
// Crear un array temporario para trabajar.
|
||||
int[] temp = new int[elementos];
|
||||
// Llamar al metodo recursivo.
|
||||
recMergeSort(temp, 0, elementos - 1);
|
||||
}
|
||||
|
||||
private void recMergeSort(int[] temp, int izquerda, int derecha) {
|
||||
if (izquerda != derecha) {
|
||||
int medio = (izquerda + derecha) / 2;
|
||||
// Trabajar con los valores en el lado izquerdo.
|
||||
recMergeSort(temp, izquerda, medio);
|
||||
// Trabajar con los valores en el lado derecha.
|
||||
recMergeSort(temp, medio + 1, derecha);
|
||||
// Unir los valores.
|
||||
merge(temp, izquerda, medio + 1, derecha);
|
||||
}
|
||||
}
|
||||
|
||||
private void merge(int[] temp, int prevIzquerda, int prevMedio, int derecha) {
|
||||
int j = 0;
|
||||
int izquerda = prevIzquerda;
|
||||
int medio = prevMedio - 1;
|
||||
int masDerecha = derecha - izquerda + 1;
|
||||
|
||||
while (prevIzquerda <= medio && prevMedio <= derecha) {
|
||||
// Poner un valor en el array temporario.
|
||||
if (array[prevIzquerda] < array[prevMedio]) {
|
||||
temp[j++] = array[prevIzquerda++];
|
||||
}
|
||||
else {
|
||||
temp[j++] = array[prevMedio++];
|
||||
}
|
||||
}
|
||||
|
||||
while (prevIzquerda <= medio) {
|
||||
// Mientras que el valor previos de izquerda es menor que el medio correr los valores.
|
||||
temp[j++] = array[prevIzquerda++];
|
||||
}
|
||||
|
||||
while (prevMedio <= derecha) {
|
||||
// Mientras que el valor previos de derecha es menor que el medio correr los valores.
|
||||
temp[j++] = array[prevMedio++];
|
||||
}
|
||||
|
||||
for (j = 0; j < masDerecha; j++) {
|
||||
// Copiar los valores al array real.
|
||||
array[izquerda + j] = temp[j];
|
||||
}
|
||||
}
|
@ -14,6 +14,7 @@
|
||||
<MenuItem text="%seleccion" onAction="#menuSeleccion"/>
|
||||
<MenuItem text="%shell" onAction="#menuShell"/>
|
||||
<MenuItem text="%quick" onAction="#menuQuick"/>
|
||||
<MenuItem text="%merge" onAction="#menuMerge"/>
|
||||
</Menu>
|
||||
<Menu text="%listaEnlazada">
|
||||
<MenuItem text="%listaSimple"/>
|
||||
|
24
src/cl/cromer/estructuras/fxml/merge.fxml
Normal file
24
src/cl/cromer/estructuras/fxml/merge.fxml
Normal file
@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?import javafx.scene.control.*?>
|
||||
<?import javafx.scene.layout.*?>
|
||||
<?import javafx.scene.text.Text?>
|
||||
|
||||
<VBox xmlns:fx="http://javafx.com/fxml/1" prefHeight="768.0" prefWidth="1024.0" spacing="10" xmlns="http://javafx.com/javafx/8.0.92" fx:controller="cl.cromer.estructuras.MergeController">
|
||||
<fx:include source="menu.fxml" />
|
||||
<ScrollPane fitToHeight="true" fitToWidth="true" VBox.vgrow="ALWAYS">
|
||||
<HBox alignment="TOP_CENTER" VBox.vgrow="ALWAYS" spacing="50">
|
||||
<VBox spacing="10">
|
||||
<HBox alignment="CENTER" spacing="10">
|
||||
<Button text="%nuevo" onAction="#botonNuevo" />
|
||||
<Button text="%paso" onAction="#botonPaso" />
|
||||
<Button text="%correr" onAction="#botonCorrer" />
|
||||
</HBox>
|
||||
<HBox fx:id="contenidoMerge" alignment="CENTER" />
|
||||
</VBox>
|
||||
<StackPane alignment="TOP_LEFT" minWidth="450">
|
||||
<Text fx:id="codigoMerge" />
|
||||
</StackPane>
|
||||
</HBox>
|
||||
</ScrollPane>
|
||||
</VBox>
|
Loading…
Reference in New Issue
Block a user