Avatar billede bonebreaker Nybegynder
07. december 2004 - 15:38 Der er 1 løsning

Mergesort af flerdimensionel array.

Har siddet og stirret mig blind på min mergesort af et flerdimensionalt array.
Problemet er at resultatet bliver anden halvdel af arrayet 2 gange efter hinanden og det bliver desværre ikke sorteret. Nogen der kan se hvad fejlen er, vil skyde på det er en fejl i en tæller et eller andet sted

Kode:

        private static void sorterArray(Object[][] data, int intStart, int i, int intType){
            int i1;
            int i2;
           
            if(i > 1){
                i1 = i / 2;
                i2 = i - i1;
               
                sorterArray(data, intStart, i1, intType);
                sorterArray(data, intStart + i1, i2, intType);
               
                samlArray(data, intStart, i1, i2, intType);
            }
        }
       
        private static void samlArray(Object[][] data, int intStart, int i1, int i2, int intType){
            Object[][] temp = new Object[i1 + i2][3];
           
            int kopieret = 0;
            int kopieret1 = 0;
            int kopieret2 = 0;
           
            while((kopieret1 < i1) && (kopieret2 < i2)){
                if(Float.parseFloat(data[intStart + kopieret1][intType].toString()) < Float.parseFloat(data[intStart + i1 + kopieret2][intType].toString())){
                    for(int ii = 0; ii < data[0].length; ii++){
                        temp[kopieret][ii] = data[intStart + (kopieret1)][ii];
                    }
                    kopieret++;
                    kopieret1++;
                }
                else{
                    for(int ii = 0; ii < data[0].length; ii++){
                        temp[kopieret][ii] = data[intStart + i1 + (kopieret2)][ii];
                    }
                    kopieret++;
                    kopieret2++;
                }
            }
           
            while(kopieret1 < i1){
                for(int ii = 0; ii < data[0].length; ii++){
                    temp[kopieret][ii] = data[intStart + (kopieret1)][ii];
                }               
                kopieret++;
                kopieret1++;               
            }
           
            while(kopieret2 < i2){
                for(int ii = 0; ii < data[0].length; ii++){
                    temp[kopieret][ii] = data[intStart + i1 + (kopieret2)][ii];
                }               
                kopieret++;
                kopieret2++;
            }
           
            for(int i = 0; i < i1 + i2; i++){
                for(int ii = 0; ii < temp[0].length; ii++){
                    data[i][ii] = temp[i][ii];
                }
            }
        }
Avatar billede bonebreaker Nybegynder
10. december 2004 - 10:14 #1
Har løst problemet...
Var en forkert optælling
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester