Avatar billede brianb Nybegynder
11. juli 2008 - 14:49 Der er 13 kommentarer og
1 løsning

Sorterings algoritme - bubblesort

Jeg sidder og gloer på lidt kode, som er et generelt problem i alle eksempler, det er en sorteringsalgoritme, som skal sortere et array. Jeg ønsker at tage en liste med fx. {11,99,24,22,56} og sortere den i faldende orden, ved hjælp af denne algoritme, jeg forstår bare ikke lige hvordan jeg får en system.out, pga den "Swap" i den inderste for-løkke.

  1     public void bubbleSort(int array[])
  2    {
  3        for (int i = 0; i < array.length - 1; i++)
  4        {
  5                boolean swapped = false;
  6                for (int j = 0; j < array.length – i - 1; j++)
  7            {
  8                if (array[j] > array[j+1])
  9                {
10                        swap(array,j,j+1);
11                        swapped = true;
12                }
13              }   
14                if (!swapped)
15                return;
16        }
17  }
Avatar billede erikjacobsen Ekspert
11. juli 2008 - 15:37 #1
Øh, hvad er dit problem?
Avatar billede brianb Nybegynder
11. juli 2008 - 16:11 #2
hvordan jeg får en system.out med et sorteret array, mit problem er hvordan jeg definerer "swap" linje 10.
Avatar billede erikjacobsen Ekspert
11. juli 2008 - 16:25 #3
Det er vel to forskellige ting. Som erstatning for swap, kan du bruge disse tre linier:

  int tmp = array[j];
  array[j]= array[j+1];
  array[j+1] = tmp;

Det ombytter værdierne i arrayets positioner j og j+1.

At udskrive et array kan ske med

    for (int i = 0; i < array.length; i++) {
      system.out.println(array[i]);
    }
Avatar billede brianb Nybegynder
11. juli 2008 - 19:28 #4
Jeg får stadigvæk en fejl i linje 3

for (int j = 0; j < array.length – i - 1; j++) -> (-i)
Avatar billede erikjacobsen Ekspert
11. juli 2008 - 19:33 #5
Du har også to forskellige slags "minus"-tegn. Et kort og et langt. Det er det lange af de to, der dur.
Avatar billede brianb Nybegynder
11. juli 2008 - 19:56 #6
Okay det var et lidt dumt spørgsmål så :)

Måden jeg itererer på er også forkert, hvordan laver jeg en System.out.print();? På denne kode så den skriver det nye array ud?

public class ss{
   
    public void bubbleSort()
    {
        int array[] = {22,33,11};
            for (int i = 0; i < array.length - 1; i++)
            {   
               
                boolean swapped = false;
                for (int j = 0; j < array.length - i- 1; j++)
                {
                   
                    if (array[j] > array[j+1])
                    {
                        int tmp = array[j];
                        array[j]= array[j+1];
                        array[j+1] = tmp;
                        swapped = true;
                       
                    }
                   
                } 
                if (!swapped)
                   
                    return;
            }
           
    }
   
    public static void main(String args[])
    {
        ss s = new ss();
        s.bubbleSort();   
       
    }
}
Avatar billede erikjacobsen Ekspert
11. juli 2008 - 22:23 #7
Du opretter arrayet i din main-metode, tager det med som argument til din bubblesort-metode (som i koden i dit oprindelige spørgsmål), og skriver det derefter ud i din main-metode.
Avatar billede brianb Nybegynder
11. juli 2008 - 22:36 #8
public class ss{
   
    public void bubbleSort(int array[])
    {
            for (int i = 0; i < array.length-1; i++)
            {       
                boolean swapped = false;
                for (int j = 0; j < array.length-i-1; j++)
                {   
                    if (array[j] > array[j+1])
                    {
                        int tmp = array[j];
                        array[j]= array[j+1];
                        array[j+1] = tmp;
                        swapped = true;
                    }
                } 
                if (!swapped)       
                    return;
            }
           
    }
   
    public static void main(String args[])
    {
        ss s = new ss();
        System.out.println(s.bubbleSort(Hvad skal der stå her? array hvordan?));   
    }
}
Avatar billede erikjacobsen Ekspert
11. juli 2008 - 22:43 #9
Du kan formentlig skrive (utestet)

 
  int array[] = {22,33,11};  //Du opretter arrayet i din main-metode
  s.bubbleSort(array);      //tager det med som argument til din bubblesort-metode
  for (int i = 0; i < array.length; i++) {  //og skriver det derefter ud i din main-metode.
    system.out.println(array[i]);
  }
Avatar billede erikjacobsen Ekspert
11. juli 2008 - 22:45 #10
Og system med stort "S":  System.out....osv.....
Avatar billede brianb Nybegynder
11. juli 2008 - 23:00 #11
Tak! Smid et svar :)
Avatar billede erikjacobsen Ekspert
11. juli 2008 - 23:01 #12
Jeg samler slet ikke på point, tak. Svar selv, og accepter dit eget svar.
Avatar billede brianb Nybegynder
11. juli 2008 - 23:05 #13
Mange tak.
Avatar billede arne_v Ekspert
12. juli 2008 - 04:11 #14
Hvis du skal lave bubble sort, så skal du lave bubble sort. Og jeg antager at det
er tilfældet.

Hvis du bare skal bruge en sortering, så kan du:

import java.util.Arrays;

og

Arrays.sort(array);
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

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