řazení jako v bubble sort – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

řazení jako v bubble sort – Java – Fórum – Programujte.comřazení jako v bubble sort – Java – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
Noneus0
Návštěvník
23. 3. 2013   #1
-
0
-

Opět ahoj

Potřeboval bych poradit s tím, jak rozhýbat řazení na principu bubble sort. Začal jsem, ale zasekl jsem se u toho, jak zapsat to, aby se větší číslo zařadilo za to menší. Narychlo jsem spíchnul tohle, ale nejsem si jistý, jestli postupuju dobře. Nebo bych to měl dát do while?

Díky

int pole[] = {3, 12, 4, 2, 7};
        for (int i = 0; i < pole.length; i++) {
            if (i > i + 1) {
                int tmp = i;
                i = i + 1;
                i = tmp;
           
               
               
               
            System.out.println(pole[i]);
            }
        }

Nahlásit jako SPAM
IP: 93.153.18.–
Flowy0
Věrný člen
23. 3. 2013   #2
-
0
-

potrebujes dva cykli ... jeden ktory bude pocitat kolko krat si pole presiel (kazdy prvok musis vybublat na svoje miesto) a druhy ktory samotne zaradenie vykona

Nahlásit jako SPAM
IP: 178.41.163.–
https://github.com/Flowy
Noneus0
Návštěvník
23. 3. 2013   #3
-
0
-

#2 Flowy
A jak poznám, který je který? Mohl bys to sem nahodit, prosím?

Nahlásit jako SPAM
IP: 93.153.18.–
crazy
~ Moderátor
+10
Grafoman
Nahlásit jako SPAM
IP: 89.190.90.–
All you need is vision and time.
Noneus0
Návštěvník
23. 3. 2013   #5
-
0
-

#4 crazy
koukal jsem na to, ale nějak mi to nefachá. Ať zkouším tmp, i nebo j, nikdy mi to neprintne to, co potřebuji.

int pole[] = {3, 12, 4, 2, 7};
        for (int i = 0; i < pole.length; i++) {
            for (int j = 0;j < pole.length - i;j++)
            if (j < j + 1) {
                int tmp = j;
                pole[j] = j + 1;
                pole[j + 1] = tmp;
          
            System.out.println(?????????);
            }
           
        }

Nahlásit jako SPAM
IP: 93.153.18.–
Řešení
fifacz0
Duch
23. 3. 2013   #6
-
0
-
Vyřešeno Nejlepší odpověď

Máš v tom trošku nepořádek. Za prvé nevím, proč máš ve druhém cyklu j < pole.length - i, místo toho bys tam měl dát j<pole.length-1 a dále taky nechápu, proč do proměnné tmp dáváš j, což je vlastně index. Ty bys tam ale potřeboval uložit hodnotu na tom indexu. (to samé i ten další řádek a tak samo i ta podmínka - j je vždy menší než j+1) Tzn. správně by to mohlo být nějak takto:

     int pole[] = {3, 12, 4, 2, 7}; int tmp;
     for (int i = 0; i < pole.length; i++) {
          for (int j = 0;j < pole.length - 1;j++) {
              if (pole[j] > pole[j+1]) {
                tmp = pole[j];
                pole[j] = pole[j + 1];
                pole[j + 1] = tmp;
              }
          }

      }

a pak vypsat pomocí dalšího cyklu...
for (int p=0; p<pole.length-1;p++) {

System.out.println(pole[p]+" ");

}

NetBeans nainstalované nemám, v javě nedělám a nezkoušel jsem to, ale algoritmicky by to snad mělo být správně:).

Tohle je vcelku hloupý:) algoritmus pro pevnou časovou složitost n^2, pokud bys to chtěl alespoň trošku optimalizovat, tak by bylo dobré si hlídat, zda náhodou jeden průchod nedošlo k žádné změně a případně cykly předčasně ukončit. Asymptotickou složitost tím ale samozřejmě nezměníš, ta zůstává n^2.

Nahlásit jako SPAM
IP: 78.128.198.–
Noneus0
Návštěvník
23. 3. 2013   #7
-
0
-

#6 fifacz
Funguje to, ovšem bez -1 za délkou pole v posledním cyklu. Díky moc

Nahlásit jako SPAM
IP: 93.153.18.–
fifacz0
Duch
23. 3. 2013   #8
-
0
-

   

#7 Noneus
jasně, v tom vypisování jsem tam tu -1 zapomněl..  

Nahlásit jako SPAM
IP: 78.128.198.–
KIIV
~ Moderátor
+43
God of flame
24. 3. 2013   #9
-
0
-

krom toho prvni cyklus muze byt while ... s nejakou bool promennou ... ktera se nastavi na true, pokud si prohodil nejakou hodnotu ve vnorenem cyklu..  (pak pro serazeny pole bude rychlejsi jak quicksort) neserazeny samozrejme zustava, ale muze byt taky rychlejsi a opacne serazeny klasicky nejvetsi slozitost (to co mas ted vzdy)...

Nahlásit jako SPAM
IP: 83.58.86.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 28 hostů

Podobná vlákna

Bubble sort — založil Anonymní uživatel

Náhodné čísla a Bubble Sort — založil Supersonic

Razeni pole bubble sortem — založil Hadrovej

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý