Skip to content

Commit bae8c18

Browse files
committed
Add HeapSort in Java
1 parent d6de074 commit bae8c18

1 file changed

Lines changed: 68 additions & 0 deletions

File tree

HeapSort/Java/HeapSort.java

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package com.dev.namhoai.sort;
2+
3+
public class HeapSort {
4+
5+
public void sort(int[] arr) {
6+
for (int i = 1; i < arr.length; i++) {
7+
heapAdd(arr, i);
8+
}
9+
10+
for (int i = arr.length - 1; i > 0; i--) {
11+
swap(arr, 0, i);
12+
heapify(arr, i - 1);
13+
}
14+
}
15+
16+
private void heapify(int[] arr, int end) {
17+
int i = 0;
18+
int leftIndex;
19+
int rightIndex;
20+
while (i <= end) {
21+
leftIndex = 2 * i + 1;
22+
if (leftIndex > end) {
23+
break;
24+
}
25+
rightIndex = 2 * i + 2;
26+
if (rightIndex > end) {
27+
rightIndex = leftIndex;
28+
}
29+
if (arr[i] >= Math.max(arr[leftIndex], arr[rightIndex])) {
30+
break;
31+
}
32+
if (arr[leftIndex] >= arr[rightIndex]) {
33+
swap(arr, i, leftIndex);
34+
i = leftIndex;
35+
} else {
36+
swap(arr, i, rightIndex);
37+
i = rightIndex;
38+
}
39+
}
40+
}
41+
42+
private void swap(int[] arr, int x, int y) {
43+
int temp = arr[x];
44+
arr[x] = arr[y];
45+
arr[y] = temp;
46+
}
47+
48+
private void heapAdd(int[] arr, int end) {
49+
int i = end;
50+
while (i > 0) {
51+
if (arr[i] > arr[(i - 1) / 2]) {
52+
swap(arr, i, (i - 1) / 2);
53+
i = (i - 1) / 2;
54+
} else {
55+
break;
56+
}
57+
}
58+
}
59+
60+
public static void main(String[] args) {
61+
HeapSort hs = new HeapSort();
62+
int[] arr = {-1, 5, 8, 2, -6, -8, 11, 5};
63+
hs.sort(arr);
64+
for (int a : arr) {
65+
System.out.println(a);
66+
}
67+
}
68+
}

0 commit comments

Comments
 (0)