Added missing classes from final year at OSU

This commit is contained in:
2019-06-17 14:04:15 -07:00
parent 8fa1ffb1b0
commit c717a0316f
166 changed files with 653934 additions and 308 deletions

View File

@@ -0,0 +1,9 @@
For insertsort.py and mergesort.py, ensure data.txt is in the same directory, then run:
python3 insertsort.py
python3 mergesort.py
For insertTime.py and mergeTime.py, simply run:
python3 insertTime.py
python3 mergeTime.py

View File

@@ -0,0 +1,3 @@
10 10 9 8 7 6 5 4 3 2 1
3 8 8 8
8 1 3 4 1 4 7 3 5

View File

@@ -0,0 +1,34 @@
from random import randint
from time import time
MIN_INT = 0
MAX_INT = 10000
def insert_sort(data):
for current_value_index in range(1, len(data)):
current = data[current_value_index]
while current_value_index > 0 and data[current_value_index - 1] > current:
data[current_value_index] = data[current_value_index - 1]
current_value_index -= 1
data[current_value_index] = current
return data
if __name__ == "__main__":
start = 5000
step = 1000
n_values = [start + i * step for i in range(10)]
n_generated_list = [[randint(MIN_INT, MAX_INT) for _ in range(n_value)] for n_value in n_values]
print("n_value, time")
for current_list in n_generated_list:
current_length = len(current_list)
start_time = time()
insert_sort(current_list)
print("{}, {}".format(current_length, time() - start_time))

View File

@@ -0,0 +1,41 @@
INPUT_FILENAME = "data.txt"
OUTPUT_FILENAME = "insert.txt"
def insert_sort(data):
for current_value_index in range(1, len(data)):
current = data[current_value_index]
while current_value_index > 0 and data[current_value_index - 1] > current:
data[current_value_index] = data[current_value_index - 1]
current_value_index -= 1
data[current_value_index] = current
return data
if __name__ == "__main__":
output = []
with open(INPUT_FILENAME, "r") as input_file:
file_lines = input_file.readlines()
for line in file_lines:
line = line.strip("\n\r")
line_items = line.split(" ")
data_values = [int(item) for item in line_items[1:]]
output.append(insert_sort(data_values))
with open(OUTPUT_FILENAME, "w") as output_file:
output_last_index = len(output) - 1
for index, line in enumerate(output):
line_string = " ".join([str(value) for value in line])
output_file.write(line_string)
if index != output_last_index:
output_file.write("\n")

View File

@@ -0,0 +1,64 @@
from random import randint
from time import time
MIN_INT = 0
MAX_INT = 10000
def merge_sort(data, top_level=False):
data_length = len(data)
if data_length > 1:
list_midpoint = data_length // 2
left_data = data[:list_midpoint]
left_data_length = len(left_data)
right_data = data[list_midpoint:]
right_data_length = len(right_data)
merge_sort(left_data)
merge_sort(right_data)
left_data_index = 0
right_data_index = 0
final_data_index = 0
while left_data_index < left_data_length and right_data_index < right_data_length:
if left_data[left_data_index] < right_data[right_data_index]:
data[final_data_index] = left_data[left_data_index]
left_data_index += 1
else:
data[final_data_index] = right_data[right_data_index]
right_data_index += 1
final_data_index += 1
while left_data_index < left_data_length:
data[final_data_index] = left_data[left_data_index]
left_data_index += 1
final_data_index += 1
while right_data_index < right_data_length:
data[final_data_index] = right_data[right_data_index]
right_data_index += 1
final_data_index += 1
if top_level:
return data
if __name__ == "__main__":
start = 200000
step = 250000
n_values = [start + i * step for i in range(10)]
n_generated_list = [[randint(MIN_INT, MAX_INT) for _ in range(n_value)] for n_value in n_values]
print("n_value, time")
for current_list in n_generated_list:
current_length = len(current_list)
start_time = time()
merge_sort(current_list, top_level=True)
print("{}, {}".format(current_length, time() - start_time))

View File

@@ -0,0 +1,72 @@
INPUT_FILENAME = "data.txt"
OUTPUT_FILENAME = "merge.txt"
def merge_sort(data, top_level=False):
data_length = len(data)
if data_length > 1:
list_midpoint = data_length // 2
left_data = data[:list_midpoint]
left_data_length = len(left_data)
right_data = data[list_midpoint:]
right_data_length = len(right_data)
merge_sort(left_data)
merge_sort(right_data)
left_data_index = 0
right_data_index = 0
final_data_index = 0
while left_data_index < left_data_length and right_data_index < right_data_length:
if left_data[left_data_index] < right_data[right_data_index]:
data[final_data_index] = left_data[left_data_index]
left_data_index += 1
else:
data[final_data_index] = right_data[right_data_index]
right_data_index += 1
final_data_index += 1
while left_data_index < left_data_length:
data[final_data_index] = left_data[left_data_index]
left_data_index += 1
final_data_index += 1
while right_data_index < right_data_length:
data[final_data_index] = right_data[right_data_index]
right_data_index += 1
final_data_index += 1
if top_level:
return data
if __name__ == "__main__":
output = []
with open(INPUT_FILENAME, "r") as input_file:
file_lines = input_file.readlines()
for line in file_lines:
line = line.strip("\n\r")
line_items = line.split(" ")
item_count = int(line_items[0])
data_values = [int(item) for item in line_items[1:]]
output.append(merge_sort(data_values, top_level=True))
with open(OUTPUT_FILENAME, "w") as output_file:
output_last_index = len(output) - 1
for index, line in enumerate(output):
line_string = " ".join([str(value) for value in line])
output_file.write(line_string)
if index != output_last_index:
output_file.write("\n")