algorytm.org

Implementacja w Java



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Sortowanie stogowe (heapsort) - Implementacja w Java
Ocena użytkownikóww: *****  / 1
SłabyŚwietny
Nadesłany przez Jo?o Kiakumbo, 08 czerwca 2015 11:20
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

HeapSort.java:
//Sortowanie stogowe (heapsort)
//www.algorytm.org

import java.util.Scanner;
public class HeapSort {
    static int [] tab;
    static Scanner s =new Scanner(System.in);
    
    static void heapify (int[] tab, int heap_size, int i) {
        int largest, temp;
        int l=2*i+1, r=(2*i)+2;
        if (l<heap_size && tab[l]>tab[i])
            largest=l;
        else largest=i;
        if (r<heap_size && tab[r]>tab[largest])
            largest=r;
        if (largest!=i) {
            temp=tab[largest];
            tab[largest]=tab[i];
            tab[i]=temp;
            heapify(tab,heap_size,largest);
        }
    }
    
    static void budKopiec(int[] tab, int rozmiar){
    	//buduj kopiec poczynając od poprzednika ostatniego liścia schodząc w górę
        for (int i=(rozmiar/2)-1;i>=0;i--)
            heapify(tab,rozmiar, i);
    }
 
    static void sort(int[] tab, int rozmiar) {
        int temp;
        //Zapewnij ze drzewo spelnia warunek kopca
        budKopiec(tab, rozmiar);
        for (int i=rozmiar-1;i>0;i--) {
        	//w korzeniu jest najwiekszy element, przenies go na koniec i zmniejsz rozmiar kopca
            temp=tab[i];
            tab[i]=tab[0];
            tab[0]=temp;
            rozmiar--;
            //odbuduj kopiec, zaczynajac od korzenia
            heapify(tab,rozmiar,0);
        }
    }

    public static void main(String[] args) {
    	//Pobierz dane
        System.out.print("Podaj liczbe elementow:");
        int rozmiar = s.nextInt();
        tab=new int[rozmiar];
 
        for (int i=0;i<rozmiar;i++){
            System.out.print("Podaj element:");
            tab[i]= s.nextInt();
        }
        
        //Posortuj
        sort (tab,rozmiar);
        
        //Pokaz wynik
        System.out.print("Posortowane elementy");
        for (int i=0;i<rozmiar;i++){
   
            System.out.print(" "+ tab[i]);
        }
        System.out.println("\n");
    }
}
Dodaj komentarz