summaryrefslogtreecommitdiff
path: root/reverse-heap-sort.py
diff options
context:
space:
mode:
authorinternetlandlord <f.fredhenry@gmail.com>2022-11-09 21:10:29 +0000
committerinternetlandlord <f.fredhenry@gmail.com>2022-11-09 21:10:29 +0000
commitdf5e8d731a5c36b509d537ed097de8d72c07a0c9 (patch)
tree59ad81220930c2afa6be208285fb932206c68c87 /reverse-heap-sort.py
parentde9e7ac398ac4d7ea59422bdd9d9a22183f65a71 (diff)
Added reverese heap and quicksort scripts
Diffstat (limited to 'reverse-heap-sort.py')
-rwxr-xr-xreverse-heap-sort.py64
1 files changed, 64 insertions, 0 deletions
diff --git a/reverse-heap-sort.py b/reverse-heap-sort.py
new file mode 100755
index 0000000..ba6e8f6
--- /dev/null
+++ b/reverse-heap-sort.py
@@ -0,0 +1,64 @@
+#!/bin/python3
+
+# ---------- Heap Sort Algorithm
+#
+
+
+# ---------- Imported modules
+import inputoutput as io
+import csv
+import sys
+
+
+# ---------- Main
+target = sys.argv[1]
+
+# ingress of data
+numdata = io.ingressCSV(target)
+
+
+# Heap function (set up for algorithm)
+def heapMake(data, node, root):
+
+ # create root and define left and right tree branches
+ maxi = root
+ left = 2 * root + 1
+ rite = 2 * root + 2
+
+ # check for existence of left child and if so, compare to root
+ if left < node and data[maxi] > data[left]:#FIXME: swapped second comparators to <
+ maxi = left
+
+ # check for existence of right child and if so, compare to root
+ if rite < node and data[maxi] > data[rite]:#FIXME: swapped second compatarors to <
+ maxi = rite
+
+ # if needed change out root value using a swap assignment
+ if maxi != root:
+ data[root], data[maxi] = data[maxi], data[root]
+
+ # recursively make root into a heap
+ heapMake(data, node, maxi)
+
+
+# Algorithm
+def heapSort(atad):
+ span = len(atad)
+
+ # buildup heap
+ for i in range(span // 2 - 1, -1, -1):
+ heapMake(atad, span, i)
+
+ # extract heap elements single-file
+ for i in range(span - 1, 0, -1):
+ # swap assignment
+ atad[i], atad[0] = atad[0], atad[i]
+ heapMake(atad, i, 0)
+
+# using sorting algorithm
+heapSort(numdata)
+
+# finishing up, appending "-heapsorted" to sorted CSV
+target = target[:-4]+"-reverse-heap"+target[-4:]
+print("Sorting done! Writing to file")
+io.egressCSV(numdata,target)