====== BubbleSort - Bublinkové řazení ====== ===== Princip ===== Algoritmus opakovaně prochází seznam(pole) a porovnává každé dva sousedící prvky. Pokud nejsou ve správném pořadí, prohodí je. Porovnávání prvků se opakuje dokud není seznam(pole) seřazený(é). ===== Složitost ===== Asymptotická složitost bublinkového řazení je O(n²). ===== Řešení ===== ==== Varianta 1 ==== V poli se posunuje největší prvek na jeho konec, při opakování zkracujeme průchod polem odzadu. Pracujeme s prvkem na pozici i a i+1. static void BubbleSort1 (int[] npole) { int i; //pocet opakovani probublavani int j; //index v poli int pom; //pomocna promenna pro vymenu for(i=npole.length-1;i>0;i--) //vnejsi smycka { for(j=0;jnpole[j+1]) // prohodime prvky? { pom = npole[j]; npole[j]=npole[j+1]; npole[j+1]=pom; } } } } ==== Varianta 2 ==== V poli se posunuje nejmenší prvek na jeho začátek, při opakování zkracujeme průchod polem odpředu. Pracujeme s prvkem na pozici i a i+1. static void BubbleSort2 (int[] npole) { int i; //pocet opakovani probublavani int j; //index v poli int pom; //pomocna promenna pro vymenu for(i=0;i=i;j--) //vnitrni smycka { if (npole[j]>npole[j+1]) // prohodime prvky? { pom = npole[j]; npole[j]=npole[j+1]; npole[j+1]=pom; } } } } ==== Varianta 3 ==== V poli se posunuje nejmenší prvek na jeho začátek, při opakování zkracujeme průchod polem odpředu. Pracujeme s prvkem na pozici i-1 a i. static void BubbleSort3 (int[] npole) { int i; //pocet opakovani probublavani int j; //index v poli int pom; //pomocna promenna pro vymenu for(i=0;ii;j--) //vnitrni smycka { if (npole[j-1]>npole[j]) // prohodime prvky? { pom = npole[j-1]; npole[j-1]=npole[j]; npole[j]=pom; } } } } ===== Souhrnný ukázkový příklad ===== package trideni; public class Main { public static void main(String[] args) { int[] pole = {4,3,2,1}; //nestridene pole int index; //index pro pruchod pri vypisu System.out.println("Trideni - nejvetsi nakonec"); BubbleSort1(pole); for (index=0;index0;i--) //vnejsi smycka { for(j=0;jnpole[j+1]) // prohodime prvky? { pom = npole[j]; npole[j]=npole[j+1]; npole[j+1]=pom; } } } } static void BubbleSort2 (int[] npole) { int i; //pocet opakovani probublavani int j; //index v poli int pom; //pomocna promenna pro vymenu for(i=0;i=i;j--) //vnitrni smycka { if (npole[j]>npole[j+1]) // prohodime prvky? { pom = npole[j]; npole[j]=npole[j+1]; npole[j+1]=pom; } } } } static void BubbleSort3 (int[] npole) { int i; //pocet opakovani probublavani int j; //index v poli int pom; //pomocna promenna pro vymenu for(i=0;ii;j--) //vnitrni smycka { if (npole[j-1]>npole[j]) // prohodime prvky? { pom = npole[j-1]; npole[j-1]=npole[j]; npole[j]=pom; } } } } }