Skip to content

Commit 344664c

Browse files
authored
Update heapSort.java
1 parent 4447545 commit 344664c

File tree

1 file changed

+166
-0
lines changed

1 file changed

+166
-0
lines changed

Heaps/heapSort/heapSort.java

Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,167 @@
1+
// 1 based indexing for zero slight changes like formula and equal signs
2+
3+
public class Main
4+
{
5+
6+
int arr[] = new int[100];
7+
int size;
8+
9+
Main(){
10+
arr[0] = -1;
11+
size = 0;
12+
}
13+
14+
public void insert(int val){
15+
size = size + 1;
16+
int index = size;
17+
arr[index] = val;
18+
19+
while(index > 1){
20+
int parent = index/2;
21+
if(arr[parent] < arr[index]){
22+
int temp = arr[parent];
23+
arr[parent] = arr[index];
24+
arr[index] = temp;
25+
index = parent;
26+
} else {
27+
return;
28+
}
29+
}
30+
}
31+
32+
public void print(){
33+
for(int i = 1; i <= size; i++){
34+
System.out.println(arr[i] + " ");
35+
}
36+
}
37+
38+
public void delete(){
39+
if(size == 0){
40+
System.out.println("Empty Heap");
41+
return;
42+
}
43+
44+
//step 1 - putting last element into root node
45+
arr[1] = arr[size];
46+
47+
//step 2 = removinf last element
48+
size--;
49+
50+
//step 3 - take root node to its correct postiion
51+
52+
int i = 1;
53+
while(i < size){
54+
int leftnode = 2*i;
55+
int rightnode = 2*i + 1;
56+
57+
58+
if(leftnode < size && arr[i] < arr[leftnode]){
59+
int temp = arr[i];
60+
arr[i] = arr[leftnode];
61+
arr[leftnode] = temp;
62+
i = leftnode;
63+
} else if(rightnode < size && arr[i] < arr[rightnode]){
64+
int temp = arr[i];
65+
arr[i] = arr[rightnode];
66+
arr[rightnode] = temp;
67+
i = rightnode;
68+
} else {
69+
return;
70+
}
71+
}
72+
73+
}
74+
75+
public static void heapify(int arr[], int n, int i){
76+
int largest_node = i;
77+
int left_node = 2*i;
78+
int right_node = 2*i + 1;
79+
80+
if(left_node <= n && arr[largest_node] < arr[left_node]){
81+
largest_node = left_node;
82+
}
83+
84+
if(right_node <= n && arr[largest_node] < arr[right_node]){
85+
largest_node = right_node;
86+
}
87+
88+
if(largest_node != i){
89+
int temp = arr[largest_node];
90+
arr[largest_node] = arr[i];
91+
arr[i] = temp;
92+
93+
heapify(arr, n, largest_node);
94+
95+
}
96+
97+
98+
}
99+
100+
public static void heapSort(int arr[], int n){
101+
102+
int size = n;
103+
104+
while(size > 1){
105+
//step 1// to swap root node with last node and decrement the size from end so that the sorted elements can be put aside
106+
107+
int temp = arr[size];
108+
arr[size] = arr[1];
109+
arr[1] = temp;
110+
size--;
111+
112+
// step 2 to put root node at its correct position
113+
heapify(arr, size, 1);
114+
115+
116+
}
117+
118+
}
119+
120+
public static void main(String[] args) {
121+
122+
Main heap = new Main();
123+
heap.insert(50);
124+
heap.insert(55);
125+
heap.insert(53);
126+
heap.insert(54);
127+
heap.insert(52);
128+
heap.print();
129+
130+
heap.delete();
131+
132+
System.out.println("Delete function executing :");
133+
heap.print();
134+
135+
136+
int arr[] = new int[] { -1, 54, 53, 55, 52, 50 };
137+
int n = 5;
138+
139+
// heap creation
140+
for(int i = n/2; i > 0; i--){
141+
heapify(arr, n, i);
142+
}
143+
144+
145+
System.out.println("Print the array now :");
146+
147+
for(int i = 1; i <= n; i++){
148+
System.out.println(arr[i] + " ");
149+
150+
}
151+
152+
// heapsorting
153+
154+
heapSort(arr, n);
155+
System.out.println("Printing sorted array by using heapsorting :");
156+
157+
for(int i = 1; i <= n; i++){
158+
System.out.println(arr[i] + " ");
159+
160+
}
161+
162+
163+
164+
165+
}
166+
}
1167

0 commit comments

Comments
 (0)