Gyakorlati alapok

Shell-rendezés

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

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:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

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