Gyakorlati alapok
Shell-rendezés
A shell-rendezés a buborékrendezésnél tapasztalt lassúságot gyorsítja fel azáltal, hogy egymástól távol eső elemeket hasonlít össze és cserél fel. A távolságot (amelyet sok helyen növekménynek neveznek) fokozatosan csökkenti, amíg az 1 nem lesz. Minden növekmény esetén beszúrásos rendezést végez az adott növekménynek megfelelő távolságra álló elemekre. Mire a növekmény 1 lesz, sok elem már majdnem a helyére kerül.
Az alábbi kódban a rendezés kiindulópontja a int[] lepestomb = {5, 3, 1};. Ez a deklaráció azt jelenti, hogy ebből kerül meghatározásra az int lepeskoz, amely voltaképpen a növekmény mértéke. Ebben az esetben tehát először minden 5. elem kerül növekvő rendezés alá, majd minden 3. elem, majd minden elem. Nézzük meg futtatható Java-kódos változatot:
import java.util.Random;
public class Main {
public static void main(String args[]){
Random rnd = new Random();
int [] tomb = new int[10];
for(int i = 0; i < tomb.length; i++){
tomb[i] =
rnd.nextInt(50) + 1;
System.out.print(tomb[i] + " ");
}
System.out.println();
int[] lepestomb = {5, 3, 1};
for(int k = 0; k < 3; k++){
int lepeskoz
= lepestomb[k];
for(int j =
lepeskoz; j < tomb.length; j++){
int i = j - lepeskoz;
int valaszto = tomb[j];
while(i >= 0 && tomb[i] > valaszto){
tomb[i+lepeskoz] = tomb[i];
i = i - lepeskoz;
}
tomb[i+lepeskoz] = valaszto;
}
}
for(int i=0; i < tomb.length; i++)
System.out.print(tomb[i] + " ");
System.out.println();
}
}
Végeredmény (például):
22 29 2 6 39 12 5 42 39 38
2 5 6 12 22 29 38 39 39 42