Kezdőoldal » Számítástechnika » Programozás » C-ben szeretnék tömböt rendezn...

C-ben szeretnék tömböt rendezni, mi a hiba a kódban?

Figyelt kérdés

Előre megadtam a tömb elemeit, ezt a tömböt szeretném rendezni. Sajnos még rendkívül kezdő vagyok. Valaki ki tudná javítani ezt, hogy tökéletesen lefusson?

#include <stdio.h>

#include <stdlib.h>


int main() {

int tomb [9]=

{9,8,7,6,5,4,3,2,1,0

};

int i,j,temp;

for(i=0; i<8;i++){

for(j=i+1; j<9;j++){

if tomb[i]<tomb[j] {

tomb[i]==temp;

tomb[i]==tomb[j];

tomb[j]==temp;

}

}

}

}



2015. jan. 16. 13:26
1 2
 1/20 anonim ***** válasza:

tomb[i]==temp;

tomb[i]==tomb[j];

tomb[j]==temp;


Te jó ég, teljesen értelmetlen amit ide írtál. Cserélni akarsz, az "==" operátor összehasonlít nem értékül ad, és a sorrend is rossz. Helyesen:


temp=tomb[i];

tomb[i]=tomb[j];

tomb[j]=temp;

2015. jan. 16. 13:31
Hasznos számodra ez a válasz?
 2/20 anonim ***** válasza:

temp==tomb[i];

tomb[i]==tomb[j];

tomb[j]==temp;

2015. jan. 16. 13:31
Hasznos számodra ez a válasz?
 3/20 anonim ***** válasza:

#2

Hopp, kopipaszta. :) == helyett = természetesen, ahogy #1 írta.

2015. jan. 16. 13:32
Hasznos számodra ez a válasz?
 4/20 A kérdező kommentje:

Köszönöm a javítást. A program végén (az utolsó } előtt) vissza kell térni valamivel, pl. return 1?

Nektek így lefut a kód?

2015. jan. 16. 13:38
 5/20 anonim ***** válasza:
Ráadásul a tömböd 10 elemű, de csak 9-nek foglaltál helyet. A sorszámokat is így kellene, tehát i 0-tól i<9 vagy i<=8-ig, j i+1-től j<10 vagy j<=9-ig.
2015. jan. 16. 13:41
Hasznos számodra ez a válasz?
 6/20 anonim ***** válasza:

#include <stdio.h>

#include <stdlib.h>


int IntComparatorAsc(const void* A, const void* B) {

.. int a = *((int*)A);

.. int b = *((int*)B);

.. return a-b;

}


int main() {

.. int Array[] = {5, 9, 7, 3, 8, 4, 6, 5, 2};

.. int ArrayLength = 9;

.. qsort(Array, ArrayLength, sizeof(int), IntComparatorAsc);


.. return EXIT_SUCCESS;

}

2015. jan. 16. 13:46
Hasznos számodra ez a válasz?
 7/20 A kérdező kommentje:
Utolsó: ez a kód nem túlbonyolítása annak amit én írtam? külön függvény kell azért hogy visszatérési érték legyen?
2015. jan. 16. 13:50
 8/20 anonim ***** válasza:

A standard C library-ben, azon belül is az stdlib.h-ban van erre már kész és hatékony megoldás, a qsort. 4 paramétere van:

void qsort(

.. Egy memóriacím, ami a tömböd első elemére mutat,

.. A tömb elemeinek száma,

.. Hány bájton fér el a tömb egy eleme,

.. Egy, a tömb két elemét összehasonlító függvény

);


Ahhoz, hogy ez bármilyen adattípuson működni tudjon, muszáj neki void*-ekkel dolgoznia. Továbbá, emiatt maga a qsort nem tudja megállapítani, hogy melyik elem van hamarabb a sorrendben. Éppen ezért kell megadni neki egy hasonlító függvényt, amely 3 lépésből áll:

int compar(const void* a, const void* b) {

.. 1) A két paramétert vissza kell alakítani arra az adattípusra, amit ténylegesen tárol a tömb

.. 2) Meghatározni, hogy melyik elem van előbb a sorban

.. 3) Visszaadni egy egész számot

}


A 3. lépésben leírt egész szám a következő értékek lehetnek:

- Egy negatív szám, ha a tömbben az "a" paraméter által mutatott adat van előbb

- Egy pozitív szám, ha a "b" paraméter által mutatott adat van előbb

- 0, ha a két adat megegyezik.


És sokkal hatékonyabban csinálja, mint amit te implementáltál (a neve gyorsrendezés, Quick sort). Annak a neve, ha jól emlékszem, buborékrendezés, angolul Bubble sort. Itt egy videó az algoritmusokról vizualizálva:

https://www.youtube.com/watch?v=kPRA0W1kECg

A tied 3:58-tól látszik, a Quick sort pedig 0:39-től. Figyeld meg, mennyi adaton mennyi ideig dolgoznak.


[link]

2015. jan. 16. 14:06
Hasznos számodra ez a válasz?
 9/20 anonim ***** válasza:

Egy kezdőnek aki az alapvető operátorok kapcsán is bizonytalan ne gyertek itt optimalizálási kérdésekkel. Másrészt ha valóban optimalizálnia kellene, akkor mérni kell a futásidőt és nem aszimptotikus elemzést végezni. A buborékrendezés 16 elem alatt a leggyorsabb választás.


A qsort használhatatlan egy kezdőnek, mert függvényt kell átadni és (void*)-ról kell cast-olni kész őrület.

2015. jan. 16. 14:17
Hasznos számodra ez a válasz?
 10/20 anonim ***** válasza:
Nem értem, miért kell így fosni a pointerektől...
2015. jan. 16. 14:19
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!