C-programmerings fråga. Hur fungerar denna loop?
C-programmerings fråga. Hur fungerar denna loop?
Tjenare!
Ursäkta att jag tränger mig in under microprocessorer-fliken, men jag visste inte riktigt vart min fråga hörde.
Och här lär det ju finnas tusentals C-programmerare.
Dettar är ett program som skriver in 10 värden och sorterar dom i nrordning. Jag fattar inte riktigt hur sorteringsloopen fungerar.
double xdata[10], temp;
int i, j;
/* läs in data */
for (i = 0; i < 10; i++)
{
printf("xdata[%d] = ", i);
scanf("%lf", &xdata);
}
/* sortera data */
for (i = 0; i < 9; i++)
for (j = i + 1; j < 10; j++)
if (xdata[j] < xdata) {
/* byt plats */
temp = xdata;
xdata = xdata[j];
xdata[j] = temp;
}
/* skriv data */
for (i = 0; i < 10 ; i++)
{
if (i % 5 == 0)
printf("\n");
else
printf(" ");
printf("%f", xdata);
}
printf("\n");
return 0;
}
Någon som är sugen på att göra ett försök att förklara?
Ursäkta att jag tränger mig in under microprocessorer-fliken, men jag visste inte riktigt vart min fråga hörde.
Och här lär det ju finnas tusentals C-programmerare.
Dettar är ett program som skriver in 10 värden och sorterar dom i nrordning. Jag fattar inte riktigt hur sorteringsloopen fungerar.
double xdata[10], temp;
int i, j;
/* läs in data */
for (i = 0; i < 10; i++)
{
printf("xdata[%d] = ", i);
scanf("%lf", &xdata);
}
/* sortera data */
for (i = 0; i < 9; i++)
for (j = i + 1; j < 10; j++)
if (xdata[j] < xdata) {
/* byt plats */
temp = xdata;
xdata = xdata[j];
xdata[j] = temp;
}
/* skriv data */
for (i = 0; i < 10 ; i++)
{
if (i % 5 == 0)
printf("\n");
else
printf(" ");
printf("%f", xdata);
}
printf("\n");
return 0;
}
Någon som är sugen på att göra ett försök att förklara?
Re: C-programmerings fråga. Hur fungerar denna loop?
För varje värde jämför du med de andra (i tur och ordning) och om det ena är större än det andra byter de plats.
Det är väl mer eller mindre en vanlig bubble sort.
Det är väl mer eller mindre en vanlig bubble sort.
Re: C-programmerings fråga. Hur fungerar denna loop?
Vad mer specifikt är oklart ? Kör en "simulering" med papper och penna så ser du hur det fungerar...
Re: C-programmerings fråga. Hur fungerar denna loop?
Håller med, ren brute-force.. Nu vet vi inte avsikten, men annars så innehåller ju de flesta C-bibliotek en implementation av quicksort.
Re: C-programmerings fråga. Hur fungerar denna loop?
Här har du en "pappers-simulering" för en vektor med fyra element, 4 1 3 2.
Kod: Markera allt
i=0, j=1 4 1 3 2
| |
Byt plats -> 1 4 3 2
i=0, j=2 1 4 3 2
| |
Låt stå
i=0, j=3 1 4 3 2
| |
Låt stå
i=1, j=2 1 4 3 2
| |
byt plats -> 1 3 4 2
i=1, j=3 1 3 4 2
| |
Byt plats -> 1 2 4 3
i=2, j=3 1 2 4 3
| |
Byt plats -> 1 2 3 4
Färdigt.
Re: C-programmerings fråga. Hur fungerar denna loop?
Det är som andra säger en bubble-sort men skriven på ett riktigt uselt sätt.
Kul sätt att illustrera sorteringsalgoritmer för övrigt:
http://www.youtube.com/user/AlgoRythmics
Kul sätt att illustrera sorteringsalgoritmer för övrigt:
http://www.youtube.com/user/AlgoRythmics
Re: C-programmerings fråga. Hur fungerar denna loop?
Man tackar!
Jag visste inte riktigt vart jag skulle sätta fingret på problemet.
försökte tidigare skriva ut det på papper men visste inte riktigt vad jag höll på med.
Nu trillade poletten ner tillslut. tack snigelen för ett förbaskat bra exempel och att du tog dig tiden att skriva det!
skitschysst!!!!
har börjat en nybörjarkurs i C-programmering förra veckan, så allt är lite lurigt nu i början innan man kommer in i det rätta tänkandet tror jag.
Ha det bra!!
Jag visste inte riktigt vart jag skulle sätta fingret på problemet.
försökte tidigare skriva ut det på papper men visste inte riktigt vad jag höll på med.
Nu trillade poletten ner tillslut. tack snigelen för ett förbaskat bra exempel och att du tog dig tiden att skriva det!
skitschysst!!!!
har börjat en nybörjarkurs i C-programmering förra veckan, så allt är lite lurigt nu i början innan man kommer in i det rätta tänkandet tror jag.
Ha det bra!!
- Swech
- EF Sponsor
- Inlägg: 4750
- Blev medlem: 6 november 2006, 21:43:35
- Ort: Munkedal, Sverige (Sweden)
- Kontakt:
Re: C-programmerings fråga. Hur fungerar denna loop?
Vad är det som är så uselt?
Funktion?
kommentering?
kodning?
Swech (som inte kör C)
Funktion?
kommentering?
kodning?
Swech (som inte kör C)
Re: C-programmerings fråga. Hur fungerar denna loop?
LHelge skrev:Det är som andra säger en bubble-sort men skriven på ett riktigt uselt sätt.
Kul sätt att illustrera sorteringsalgoritmer för övrigt:
http://www.youtube.com/user/AlgoRythmics

Den skulle man sett för 20 år sen då man försökte förstå quicksort.
Re: C-programmerings fråga. Hur fungerar denna loop?
Det här:Swech skrev:Vad är det som är så uselt?
Funktion?
kommentering?
kodning?
Swech (som inte kör C)
Kod: Markera allt
for (i = 0; i < 9; i++)
for (j = i + 1; j < 10; j++)
if (xdata[j] < xdata[i]) {
/* byt plats */
temp = xdata[i];
xdata[i] = xdata[j];
xdata[j] = temp;
}
Minsta kravet är så här:
Kod: Markera allt
for (i = 0; i < 9; i++){
for (j = i + 1; j < 10; j++){
if (xdata[j] < xdata[i]) {
/* byt plats */
temp = xdata[i];
xdata[i] = xdata[j];
xdata[j] = temp;
}
}
}
Kod: Markera allt
for (i = 0; i < 9; i++)
{
for (j = i + 1; j < 10; j++)
{
if (xdata[j] < xdata[i])
{
/* byt plats */
temp = xdata[i];
xdata[i] = xdata[j];
xdata[j] = temp;
}
}
}
Visserligen var exempelkoden inklistrad utan taggar, så formateringen giått förlorad.
Tittar man på MISRA så ser man att det är en dödssynd att skriva kod som orginalet.
Det handlar om att vara övertydlig, då är risken för fel mindre.
Även en sån har rad är tillåten
Kod: Markera allt
for (i = 0; i < 9; i++)for (j = i + 1; j < 10; j++)if (xdata[j] < xdata[i]){temp = xdata[i];xdata[i] = xdata[j];xdata[j] = temp;}
Re: C-programmerings fråga. Hur fungerar denna loop?
Loopar den inte onödigt många gånger också?
Om alla värden är i ordning från början så kommer den ju ändå att loopa igenom alla. Med en klassisk bubble sort avbryter man väl om det inte blev nåt byte?
Om alla värden är i ordning från början så kommer den ju ändå att loopa igenom alla. Med en klassisk bubble sort avbryter man väl om det inte blev nåt byte?
Re: C-programmerings fråga. Hur fungerar denna loop?
I normalfallet brukar den yttre loopen vara en while som fortsätter så länge en förflyttning gjorts precis som nerre säger. Men å andra sidan är det väl lite som att sminka en gris när man optimerar en bubble-sort.
Re: C-programmerings fråga. Hur fungerar denna loop?
Är det inte så att det kan vara snabbare med en bubblesort än quicksort för små input och t.om. så att vissa implementationer går över till bubblesort när man kommit tillräckligt långt i rekursionen?
10 element som i koden ovan är ganska kort.
bubblesort är dessutom lätt att implementera (jag har implementerat min egen qsort).. så om prestanda inte är viktigt kan den vara att föredra
10 element som i koden ovan är ganska kort.
bubblesort är dessutom lätt att implementera (jag har implementerat min egen qsort).. så om prestanda inte är viktigt kan den vara att föredra
Re: C-programmerings fråga. Hur fungerar denna loop?
Det känns som att diskussionen ballar ut lite nu, alla sorteringsalgoritmer har sin plats och i en första C-kurs kan väl vara en av de bättre för just bubble-sort precis som pbgp säger. Vill du se tydligt hur den jobbar så titta på folkdansarna. 
