Avatar billede blackie Nybegynder
06. august 2001 - 20:18 Der er 7 kommentarer og
3 løsninger

Selection Sort

Hvorfor virker dette ikke, den bytter de to første tal og så er det, det??

#include <iostream>
#include <algorithm>
#include <conio>

using namespace std;

template <class T>
void writeList(const T a[], int n)
{
int i;
for (i=0; i<n; i++)
    cout<<a[i] <<\" \";
  cout<<endl;
  getch();
}


template <class T>
void selectionSort (T arr[], int n)
{
int i, j, index_of_largest, largest;
    if(n==0)
  return;

    for (i=n-1; i >0; --i)
    {
    largest=arr[0];
  index_of_largest=0;

      for (j=1; j<=i; ++j)
      {
          if(arr[j] > largest)
        {
        largest=arr[j];
        index_of_largest=j;
        }
      }

  }
  swap(arr[i], arr[index_of_largest]);
}

int main()
{
int list[10] = {5,9,1,3,4,8,2,0,7,6};
cout<<\"Sortering af en tabel: \"<<endl;
selectionSort(list, 10);
writeList(list,10);
cout<<endl;
getch();
return 0;
}
Avatar billede kamikaze Nybegynder
06. august 2001 - 21:04 #1
for (i=n-1; i >0; --i)  // Her er der en fejl
    {                  // Du sætter i = 9, og looper SÅ LÆNGE 9 > 0, dvs. aldrig...
    largest=arr[0];
  index_of_largest=0;
Avatar billede kamikaze Nybegynder
06. august 2001 - 21:05 #2
(med i = 9 mener jeg i forhold til din main, hvor du kalder selectionSort(list, 10)
Avatar billede blackie Nybegynder
06. august 2001 - 21:25 #3
Det forstår jeg ikke, 9 er da større end 0, hvad mener du?
Avatar billede morten2 Nybegynder
07. august 2001 - 01:17 #4
Det er din algoritme der er forkert.
Du finder først det største element i hele listen og flyter det forest. Så finder du det største i listen minus det siste element og flytter nest forest. Hvad hvis det siste element er det andet største :-)

Avatar billede morten2 Nybegynder
07. august 2001 - 01:19 #5
Prøv med

for(i=0;i<n;i++)

for(j=i+1;j<n;j++)
Avatar billede morten2 Nybegynder
07. august 2001 - 01:25 #6
PS: Denne alogritme er dybt ineffektiv.
Hvis du skal sortere mange data skulle du bruge quick sort eller en anden effektiv algoritme.
Avatar billede kamikaze Nybegynder
07. august 2001 - 10:38 #7
UNDSKYLD... For min taber-bemærkning... Jeg var vist lidt for træt!!!!!!!!
Avatar billede blackie Nybegynder
07. august 2001 - 11:01 #8
Kamikaze<<Det tror jeg også selv, jeg var, jeg har jo ikke sat swapningen indenfor for løkken, en dum lille tuborgparentes.Nu virker det.Vi får ti point hver, er det ok?
Avatar billede morten2 Nybegynder
07. august 2001 - 11:07 #9
Ja nogen gange kan man ikke se skoven for bare træer ;-)

Takker for point
Avatar billede kamikaze Nybegynder
10. august 2001 - 18:53 #10
Hmmmm... Det er jo ren foræring, men tak :-)
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