webForumDet fria alternativet

nybörjare...problem

C/C++ur C/C++

7 svar · 305 visningar · startad av P

Medlem sedan jan. 20012 204 inlägg
Frågan#1

Har denna kod (utdrag): (början av en bubblesort)...

#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>

// PROTOTYP DEKLERATION AV FUNKTIONERNA
int metod1(int osort[1000], int antal, int antalb,int antalj);
int metod2(int osort[1000], int antal, int antalb,int antalj);
int metod3();

// GLOBALA VARIABLER
int osort[11];

int main()
{
const int antal = 10;
int osort1[1000],antalj,antalb;
osort[0]=9;
osort[1]=2;
osort[2]=1;
osort[3]=4;
osort[4]=3;
osort[5]=4;
osort[6]=6;
osort[7]=6;
osort[8]=7;
osort[9]=8;
cout<<"TEST METOD1!\n";
metod1(osort,antal,antalb,antalj);
    for(int i=0;i<antal;i++)
    {
    cout<<osort[i]<<"\n";
    }
    

getch();
}

int metod1(int osort[1000], int antal, int antalb, int antalj)
{
int i,j,temp;
antalj=0;
antalb=0;
for(j=0;j<antal-1;j++)
{
 for(i=0;i<antal-1;i++)
 {
 antalj=antalj+1;
                   if (osort[i]>osort[i+1])
                   {
                   antalb++;
                   osort[i]=temp;
                   osort[i]=osort[i+1];
                   osort[i+1]=temp;
                   }

 }
}   

}

sen när jag kör den så funakr typ allt bra förutom att jag längst ner i osort[] får ett annat tal :4236914....

Har suttit hela kvällen med det här... någon?

Medlem sedan okt. 20013 217 inlägg
#2

Fel av mig... jag läste inte tillräckligt...

Medlem sedan feb. 20002 300 inlägg
#3

Re: nybörjare...problem

for(j=0;j<antal-1;j++) ...

Bortkommenterat! Fel av mig angående index.

if (osort[i]>osort[i+1])
{
   antalb++;
   osort[i]=temp;
   osort[i]=osort[i+1];
   osort[i+1]=temp;
}

temp är ett oinitierat värde. Så tilldelar du osort värdet temp. Dvs osort får ett skräpvärde.

Rätt ska vara:

if (osort[i]>osort[i+1])
{
   antalb++;
   temp=osort[i];
   osort[i]=osort[i+1];
   osort[i+1]=temp;
}
Medlem sedan jan. 20012 204 inlägg
#4

danke.... f*n att jag inte upptäckte det!

Medlem sedan jan. 20012 204 inlägg
#5

oki... har gjort 3 funktioner av bubblesort... finns det några fler och bättre altenativ?
1. "Loopar allt 2 ggr"
2. "kör tills den inte gör fler byten"
3. "efter varje steg så finns det största talet längst åt "höger"... då jämförs inte den mer"...

Medlem sedan juni 200010 432 inlägg
#6

Bubbelsort räknas som den sämsta algoritmen som nånsin gjorts :e

En som är ungefär lika lätt att implementera men betydligt effektivare är quicksort... det finns dock ännu bättre sorteringsalgoritmer.

En variant av quicksort med STL hittar du här

Medlem sedan feb. 20002 300 inlägg
#7

P skrev:

oki... har gjort 3 funktioner av bubblesort... finns det några fler och bättre altenativ?
1. "Loopar allt 2 ggr"
2. "kör tills den inte gör fler byten"
3. "efter varje steg så finns det största talet längst åt "höger"... då jämförs inte den mer"...

Kör från båda hållen.
Du vet att efter en körning så finns det största talet i arrayen "längst till höger". Gör på samma sätt så att det minsta talet hamnar "längst till vänster". Dvs. looparna kommer att "mötas" på mitten och sorteringen är klar. :)

Medlem sedan jan. 20012 204 inlägg
#8

men tjänar man något på det jämfört med att bara köra åt höger? om man nu jämför antalet jämförelser & byten?

139 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)