terça-feira, 26 de setembro de 2017

MergeSort

01 class Teste {
02   static void imprime (int[] a) {
03     for (int i=0;i<a.length;i++) {
04       System.out.print (a[i",");
05     }
06     System.out.println ();
07   }
08   int[] metadeInicio (int[] a) {
09     /*Metade do inicio do array - estah correto, 
10     tem que considerar a quantidade de operacoes. */
11     int[] r = new int[a.length/2];
12     for (int i=0;i<a.length/2;i++) {
13       r[i]=a[i];
14     }
15     return r;
16   }
17   
18   int[] metadeFim (int[] a) {
19     /*Metade do fim do array - estah correto, para o 
20     exemplo tem que considerar a quantidade de operacoes. */
21     int mais=(a.length % 2);
22     int[] r = new int[a.length/2+mais];
23     for (int i=0;i<a.length/2+mais;i++) {
24       r[i]=a[i+mais+a.length/2];
25     }
26     return r;
27   }
28   
29   int[] fazAlgo (int[] a) {
30     imprime (a);  // AQUI IMPRIME!
31     if (a.length<=1return a;
32     int[] ini=metadeInicio(a);
33     int[] fim=metadeFim(a);
34     fazAlgo (ini);
35     fazAlgo (fim);
36     int i=0, iIni=0, iFim=0;
37     
38     while (i<a.length) {
39       if (iIni>=ini.length) {
40         a[i]=fim[iFim];
41         iFim++;
42       else if (iFim>=fim.length) {
43         a[i]=ini[iIni];
44         iIni++;
45       else if (ini[iIni]<fim[iFim]) {
46         a[i]=ini[iIni];
47         iIni++;
48       else {
49         a[i]=fim[iFim];
50         iFim++;
51       }
52       i++;
53     }  
54     imprime (a);  // AQUI IMPRIME!
55     return a;
56   }
57   
58   Teste (int[] a) {
59     fazAlgo (a);
60   }
61   
62   public static void main (String[] args) {
63     int[] a={5,3,9,7,2,1,4,8};
64     Teste t = new Teste (a);
65     imprime(a);
66   }
67 }
Java2html