From 5eb1ab1cc1c3b7f4107c1e18ca7d4e1b8a7981fa Mon Sep 17 00:00:00 2001 From: Chad Lucas Date: Fri, 21 Apr 2017 20:22:24 -0500 Subject: [PATCH 1/7] add name --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index dc1a8aa..ebc788a 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,4 @@ # assignment_sort Insertion and Merge Sort assignment + +Chad Lucas \ No newline at end of file From c2f46c6cf5b1f25c1d1028434dac7696ae4ed3a4 Mon Sep 17 00:00:00 2001 From: Chad Lucas Date: Fri, 21 Apr 2017 20:27:40 -0500 Subject: [PATCH 2/7] add insertion method --- insertion_sort.rb | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 insertion_sort.rb diff --git a/insertion_sort.rb b/insertion_sort.rb new file mode 100644 index 0000000..cf792d6 --- /dev/null +++ b/insertion_sort.rb @@ -0,0 +1,8 @@ +def insertion(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 \ No newline at end of file From 521c862695101f1fadb3251992605f655eec0a8e Mon Sep 17 00:00:00 2001 From: Chad Lucas Date: Fri, 21 Apr 2017 20:32:31 -0500 Subject: [PATCH 3/7] add insertion_sort method --- insertion_sort.rb | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/insertion_sort.rb b/insertion_sort.rb index cf792d6..91d7705 100644 --- a/insertion_sort.rb +++ b/insertion_sort.rb @@ -1,3 +1,5 @@ +require 'pry' + def insertion(array, right_index, value) i = right_index while (i >= 0 && array[i] > value) @@ -5,4 +7,16 @@ def insertion(array, right_index, value) i -= 1 end array[i + 1] = value -end \ No newline at end of file +end + +def insertion_sort(arr) + counter = 0 + while counter < arr.length-1 + insertion(arr, counter, arr[counter+1]) + counter += 1 + end + arr + #binding.pry +end + +insertation_sort([1,3,7,-2,5]) \ No newline at end of file From 6c83430cadb9dea6cc8d6a3eee1e1e3158aea19c Mon Sep 17 00:00:00 2001 From: Chad Lucas Date: Fri, 21 Apr 2017 20:36:49 -0500 Subject: [PATCH 4/7] add bubble_sort method --- bubble_sort.rb | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 bubble_sort.rb diff --git a/bubble_sort.rb b/bubble_sort.rb new file mode 100644 index 0000000..2b2c820 --- /dev/null +++ b/bubble_sort.rb @@ -0,0 +1,16 @@ +require 'pry' + +def bubble_sort(arr) + loop do + swapped = false + + (0..arr.length-1).each do |i| + if arr[i] > arr[i + 1] + arr[i], arr[i + 1] = arr[i + 1], arr[i] + swapped = true + end + end + end +end + +bubble_sort([1,3,7,-2,5]) \ No newline at end of file From e80e78b4ff1e80140ab098dcd0c10b4a4e964a85 Mon Sep 17 00:00:00 2001 From: Chad Lucas Date: Fri, 21 Apr 2017 20:39:33 -0500 Subject: [PATCH 5/7] add merge_sort method --- merge_sort.rb | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 merge_sort.rb diff --git a/merge_sort.rb b/merge_sort.rb new file mode 100644 index 0000000..c9e0343 --- /dev/null +++ b/merge_sort.rb @@ -0,0 +1,12 @@ +require 'pry' + +def merge_sort(arr) + return arr if arr.size == 1 + + mid = arr.length / 2 + + left_arr = arr[0..mid - 1] + right_arr = arr[mid..-1] + + merge(left_arr, right_arr) +end From 058fdb7e9f9d7a537e10ba5ae34d0b446f44c951 Mon Sep 17 00:00:00 2001 From: Chad Lucas Date: Fri, 21 Apr 2017 20:44:50 -0500 Subject: [PATCH 6/7] add merge_sort method --- merge_sort.rb | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/merge_sort.rb b/merge_sort.rb index c9e0343..d75dfa3 100644 --- a/merge_sort.rb +++ b/merge_sort.rb @@ -9,4 +9,23 @@ def merge_sort(arr) right_arr = arr[mid..-1] merge(left_arr, right_arr) + #binding.pry end + +def merge(left_arr, right_arr) + new_arr = [] + + until left.arr.epmty? && rigth_arr.empty? + if left.arr[0] < right_arr[0] + + new_arr << left_arr[0] + + elsif left.arr[0] > right_arr[0] + + new_arr << right_arr[0] + end + new_arr + #binding.pry +end + +merge_sort([1,3,7,2,5]) From fbfdb0f6b3e7d3f80091b539fee15c6925f2afc7 Mon Sep 17 00:00:00 2001 From: Chad Lucas Date: Fri, 21 Apr 2017 21:07:59 -0500 Subject: [PATCH 7/7] finish --- bubble_sort.rb | 62 ++++++++++++++++++++++++++--------- insertion_sort.rb | 33 +++++++++---------- merge_sort.rb | 83 +++++++++++++++++++++++++++++------------------ 3 files changed, 114 insertions(+), 64 deletions(-) diff --git a/bubble_sort.rb b/bubble_sort.rb index 2b2c820..e143a10 100644 --- a/bubble_sort.rb +++ b/bubble_sort.rb @@ -1,16 +1,46 @@ -require 'pry' - -def bubble_sort(arr) - loop do - swapped = false - - (0..arr.length-1).each do |i| - if arr[i] > arr[i + 1] - arr[i], arr[i + 1] = arr[i + 1], arr[i] - swapped = true - end - end - end -end - -bubble_sort([1,3,7,-2,5]) \ No newline at end of file +def bubble_sort(array) + + # unsorted length begins as full length + unsorted_length = array.length + + # swapped must begin true + swapped = true + + # while we made a swap + while swapped + + # assume no swap was made + swapped = false + + # for each index in the unsorted length + unsorted_length.times do |index| + + # get the current and next value + a = array[index] + b = array[index + 1] + + # if the next value is not nil + # and the current is greater than + # the next value + if b && a > b + + # swap the values + array[index] = b + array[index + 1] = a + + # swapped is true + # so we iterate again + swapped = true + end + end + + # decrement unsorted length + # since bubble sort makes + # n-1 of unsorted length + # sorted + unsorted_length -= 1 + end + + # return array of course + array +end \ No newline at end of file diff --git a/insertion_sort.rb b/insertion_sort.rb index 91d7705..632f247 100644 --- a/insertion_sort.rb +++ b/insertion_sort.rb @@ -1,22 +1,21 @@ -require 'pry' +def insert(array, right_index, value) + i = right_index -def insertion(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 + while i >= 0 && array[i] > value + array[i+1] = array[i] + i -= 1 + end + + array[i+1] = value end -def insertion_sort(arr) - counter = 0 - while counter < arr.length-1 - insertion(arr, counter, arr[counter+1]) - counter += 1 - end - arr - #binding.pry + +def insertion_sort(array) + (1...array.length).each do |i| + insert(array, i-1, array[i]) + end + array end -insertation_sort([1,3,7,-2,5]) \ No newline at end of file + +insertion_sort( [3,1,7,2,5] ) # => [1, 2, 3, 5, 7] \ No newline at end of file diff --git a/merge_sort.rb b/merge_sort.rb index d75dfa3..627d0fa 100644 --- a/merge_sort.rb +++ b/merge_sort.rb @@ -1,31 +1,52 @@ -require 'pry' - -def merge_sort(arr) - return arr if arr.size == 1 - - mid = arr.length / 2 - - left_arr = arr[0..mid - 1] - right_arr = arr[mid..-1] - - merge(left_arr, right_arr) - #binding.pry -end - -def merge(left_arr, right_arr) - new_arr = [] - - until left.arr.epmty? && rigth_arr.empty? - if left.arr[0] < right_arr[0] - - new_arr << left_arr[0] - - elsif left.arr[0] > right_arr[0] - - new_arr << right_arr[0] - end - new_arr - #binding.pry -end - -merge_sort([1,3,7,2,5]) +def merge_sort(array) + + # store length of array + n = array.length + + # base case + return array if n <= 1 + + # get left upper bound + # and right lower bound indexes + r = l = n / 2 + + # adjust based on length + # so we don't repeat values + n.even? ? l -= 1 : r += 1 + + # get array halves + left = merge_sort(array[0..l]) + right = merge_sort(array[r..n]) + + # initialize new array + # to merge onto + merged = [] + + # until both left and right + # have not values + until left.empty? && right.empty? + + # get first value from both sides + l, r = left.first, right.first + + # if both are not nil + if l && r + + # get the lesser value + value = r < l ? right.shift : left.shift + + # merge it + merged << value + + elsif l + # else merge the value that + # was not nil + merged << left.shift + elsif r + merged << right.shift + end + end + + # return merged array + merged +end \ No newline at end of file