diff --git a/README.md b/README.md index dc1a8aa..8e76f5d 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,6 @@ # assignment_sort Insertion and Merge Sort assignment + +Alexa Anderson + +Catherine Kwak \ No newline at end of file diff --git a/bubble.rb b/bubble.rb new file mode 100644 index 0000000..3d1f234 --- /dev/null +++ b/bubble.rb @@ -0,0 +1,19 @@ +def bubble_sort(arr) + begin + swapped = false + swapped = compare(arr, swapped) + end until swapped == false + arr +end + +def compare(arr, swapped) + (arr.length - 1).times do |i| + if arr[i] > arr[i+1] + arr[i], arr[i+1] = arr[i+1], arr[i] + swapped = true + end + end + swapped +end + +p bubble_sort( [1,3,7,2,5] ) diff --git a/insertion.rb b/insertion.rb new file mode 100644 index 0000000..287672e --- /dev/null +++ b/insertion.rb @@ -0,0 +1,19 @@ +def insert_sort(array) + (array.length - 1).times do |index| + insert(array, index, array[index + 1]) + end + + array +end + +def insert(array, right_index, value) + i = right_index + while(i >= 0 && array[i] > value) + array[i+1] = array[i] + i -= 1 + end + + array[i+1] = value; +end + +p insert_sort([4, 1, 8, 11, 3, 2, 10]) \ No newline at end of file diff --git a/merge.rb b/merge.rb new file mode 100644 index 0000000..89e548b --- /dev/null +++ b/merge.rb @@ -0,0 +1,37 @@ +def merge_sort(arr) + return arr if arr.length == 1 + + midpoint = arr.length / 2 + left = arr[0..midpoint - 1] + right = arr[midpoint..-1] + + merge(merge_sort(left), merge_sort(right)) +end + + +def merge(left, right) + merged_arr = [] + + until left.empty? && right.empty? + + left_value = left[0] + right_value = right[0] + + # create an index variable that keeps track of the position of the compared values in the original lef and right array + + if left_value && (right.empty? || left[0] <= right[0]) + merged_arr << left_value + left = left[1..-1] + left_value = left[0] + elsif right_value && (left.empty? || left[0] >= right[0]) + merged_arr << right_value + right = right[1..-1] + right_value = right[0] + end + + end + + merged_arr +end + +p merge_sort([4, 1, 8, 11, 3, 2, 10])