Avatar billede thomaz Nybegynder
18. maj 2000 - 08:09 Der er 9 kommentarer og
2 løsninger

Sortering af tal i Array

int[]tabel = new int[20];
her er der gjort plads til 20 tal i et array. Det er meningen er jeg skal putte 20 tilfældige tal ind i arrayet. Men hvordan tager jeg de 5 største tal  ud af arrayet ??????????
Avatar billede erikjacobsen Ekspert
18. maj 2000 - 08:18 #1
Som du selv antyder, er det nok det nemmeste at sortere dette array, og dermed
finde de 5 største i den ene ende. Du kan sikkert finde en algoritme i en lærebog.
Avatar billede thomaz Nybegynder
18. maj 2000 - 08:41 #2
medsender lige et udsnit source code, som jeg indtil videre har lavet:

int[] tabel = new int[20]

int stoerste = 0;

for(int x = 0;x<tabel.length;x++)

Avatar billede thomaz Nybegynder
18. maj 2000 - 08:44 #3
dam prøver lige igen at medsende HELE
source coden.

int[]tabel = new int[20];

int stoerste = 0;

for (int x = 0; x<tabel.length;x++)




Avatar billede thomaz Nybegynder
18. maj 2000 - 08:50 #4
nu går jeg snart BANANAS, min computer går AMOK. 3 gang lykkens gang. :-)

int tabel[] = new int [20];

int stoerste = 0;
for (int x =0;x<tabel.length;x++)
{
if (tabel[x]>stoerste)
stoerste = tabel[x]
}

for(int y = 0;y<tabel.length;y++)
{
if (tabel[y]==stoerste)
{
tabel[y] = 0;
}

/* i dette program får jeg det største
tal hvorefter positionen i arrayet nulstilles. problemet er bare hvordan kan jeg får programmet til at looope så
jeg finde de 5 stoerste tal
*/
Avatar billede gnarf Nybegynder
18. maj 2000 - 09:06 #5
Hvis du vil bruge den metode du har lagt op til, så skal du lave en for løkke mere udenom dine 2 for løkker. Denne løkke skal så løbe fra 0-4 (eller 1-5). Herved finder du de 5 største tal i arrayet, og får nulstillet deres oprindelige position. Hvis du så samtidig vil have gemt de 5 største tals værdier kan du jo gemme dem i et nyt array.
F.eks. som nedenstående.

int tabel[] = new int [20];
int femStoerste[] = new int [5];

int stoerste = 0;

for (int i=0;i<5;i++) {
  for (int x =0;x<tabel.length;x++) {
    if (tabel[x]>stoerste)
      stoerste = tabel[x]
  }

  for(int y = 0;y<tabel.length;y++) {
    if (tabel[y]==stoerste)
      tabel[y] = 0;
  }
  femStoerste[i] = stoerste;
}

---------------
Jeg tror nu jeg ville sortere hele arrayet istedet, og så bare hente tabel[0] til tabel[4] til sidst.
Avatar billede kobojt Nybegynder
18. maj 2000 - 09:11 #6
prøv med en whileløkke og en tæller variabel.

int t = 0;
while(t < 5)
{
  ...
  t++;
  ...
}

Kobojt
Avatar billede erikjacobsen Ekspert
18. maj 2000 - 09:20 #7
Et vink mere (Hmm, det ligner en skoleopgave):

Brug udvalgssortering, og stop, når du har fundet de 5 største.
Avatar billede olebloch Nybegynder
18. maj 2000 - 10:28 #8
Brug selection sort algoritmen her er den

public static void swap(int[] a,int i, int j)
{
    int temp = a[i];
   
    a[i] = a[j];
    a[j] = temp;   
}//end swap
   
public static void selectionSort(int[] a)
{ int next;
    for(next = 0;next < a.length - 1;next++)
{ int minPos = next;
    int j;
    for(j = next + 1;j < a.length;j++)
      if(a[j] < a[minPos])
      minPos = j;
        if(minPos != next)
            swap(a,minPos,next);
    }
}//end selectionSort
Avatar billede thomaz Nybegynder
18. maj 2000 - 10:32 #9
Tusinde tak for Hjælpen (allesammen) :-)

Til Erikjacobsen: Du har ganske ret det er en skoleopgave. Bruger nu den til at repetere med til eksamen. Havde nu besluttet mig for at lave et program der sorterede arrayet.
Avatar billede erikjacobsen Ekspert
18. maj 2000 - 10:34 #10
Helt i orden, tz. Jeg vil bare helst ikke give en fiks og færdig løsning til sådan en
opgave, for så lærer man jo ikke så meget  ;-))
Avatar billede olebloch Nybegynder
18. maj 2000 - 11:12 #11
hvad er der galt med selection sort ?
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