File tree 1 file changed +53
-0
lines changed
leetcode/heap-sort/sort-an-array
1 file changed +53
-0
lines changed Original file line number Diff line number Diff line change
1
+ package practice
2
+
3
+ /* *
4
+ * @author EfeDaniel
5
+ * Link: https://leetcode.com/problems/sort-an-array/
6
+ * Time Complexity: O(n log n)
7
+ * Space Complexity: O(n log n)
8
+ * Progress: Done
9
+ */
10
+ object SortAnArray {
11
+
12
+ /* *
13
+ * Main method main used for testing purposes. Tests the input case:
14
+ * nums = [5, 2, 3, 1]
15
+ *
16
+ * output = [1, 2, 3, 5]
17
+ *
18
+ */
19
+ @JvmStatic
20
+ fun main (args : Array <String >) {
21
+ println (sortArray(intArrayOf(5 ,2 ,3 ,1 )).contentToString())
22
+ }
23
+
24
+ /* *
25
+ * Solution method. A sorting algorithm is implemented. Heap sort to be specific.
26
+ */
27
+ fun sortArray (nums : IntArray ): IntArray {
28
+ val size = nums.size
29
+ for (i in (size / 2 - 1 ) downTo 0 ) heapify(nums, size, i)
30
+
31
+ for (i in size- 1 downTo 0 ) {
32
+ nums[0 ] = nums[i].also { nums[i] = nums[0 ] }
33
+ heapify(nums, i, 0 )
34
+ }
35
+
36
+ return nums;
37
+ }
38
+
39
+ private fun heapify (nums : IntArray , size : Int , i : Int ) {
40
+ var largest = i
41
+ var left = 2 * i + 1
42
+ var right = 2 * i + 2
43
+
44
+ if (left < size && nums[left] > nums[largest]) largest = left
45
+ if (right < size && nums[right] > nums[largest]) largest = right
46
+
47
+ if (largest != i) {
48
+ nums[i] = nums[largest].also { nums[largest] = nums[i] }
49
+ heapify(nums, size, largest)
50
+ }
51
+ }
52
+
53
+ }
You can’t perform that action at this time.
0 commit comments