Data untuk sorting adalah data numerik yang harus dibaca dari stdin, 1 data per baris. Baris pertama berisi total jumlah data (antara 8 s.d. 800000 data)
Hasil sorting diprint ke stdout, seluruh data dalam satu baris, dengan separasi 1 spasi diantara data.
Contoh:
Input:
9
23
43
81
17
74
62
43
39
58
Output:
17 23 39 43 43 58 62 74 81
Algoritma HEAPSORT menggunakan JAVA:
import java.io.*;
public class HeapSort
{
private static int[] a;
private static int n;
private static int left;
private static int right;
private static int largest;
public static void buildheap(int []a){
n=a.length-1;
for(int i=n/2;i>=0;i--){
maxheap(a,i);
}
}
public static void maxheap(int[] a, int i){
left=2*i;
right=2*i+1;
if(left <= n && a[left] > a[i]){
largest=left;
}
else{
largest=i;
}
if(right <= n && a[right] > a[largest]){
largest=right;
}
if(largest!=i){
exchange(i,largest);
maxheap(a, largest);
}
}
public static void exchange(int i, int j){
int t=a[i];
a[i]=a[j];
a[j]=t;
}
public static void heapsort(int []a0){
a=a0;
buildheap(a);
for(int i=n;i>0;i--){
exchange(0, i);
n=n-1;
maxheap(a, 0);
}
}
public static void main(String[] args) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String s,t = null;
int jum=0;
try {
s=reader.readLine();
// System.out.println(s);
jum = Integer.parseInt(s);
}catch (IOException e){
e.printStackTrace();
}
int[] a1= new int[jum];
if (jum>=8 && jum <=800000) {
for (int i=0;i
t=reader.readLine();
a1[i] = Integer.parseInt(t);
}catch (IOException e){
e.printStackTrace();
}
}
}
else {
System.out.println("jumlah data 8 s/d 800000 !!");
System.exit(0);
}
heapsort(a1);
for(int i=0;i
}
// System.out.println(s);
}
}
CMD PROMPT: setelah dicompile menggunakan Java, bisa kita kita jalankan dengan cmd promt windows, hasilnya seperti berikut:
HeapSort menggunakan JAVA |