mirror of
https://github.com/caperren/school_archives.git
synced 2025-11-09 21:51:15 +00:00
Added missing classes from final year at OSU
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
@@ -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))
|
||||
@@ -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")
|
||||
@@ -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))
|
||||
@@ -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")
|
||||
Reference in New Issue
Block a user