From 0bbb0d127234ec7ddeeaa55730eb323ea6d2d11b Mon Sep 17 00:00:00 2001 From: Catherine Kwak Date: Thu, 10 Nov 2016 09:56:43 -0700 Subject: [PATCH 1/5] Finish insert sort, start bubble sport --- README.md | 4 ++++ bubble.rb | 20 ++++++++++++++++++++ insertion.rb | 19 +++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 bubble.rb create mode 100644 insertion.rb 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..3ab6c69 --- /dev/null +++ b/bubble.rb @@ -0,0 +1,20 @@ +def bubble_sort + (array.length - 1).times +end + +def compare + +end + +bubble_sort( [1,3,7,2,5] ) + +swapped? = false + +begin + loop compare i i+1 + out of order, swap + swapped? = true + not out of order, move on +end until swapped? = false + +swap = false \ No newline at end of file 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 From fc02f64d252707cd285604b4f1617c0c69fa1f12 Mon Sep 17 00:00:00 2001 From: Alexa Date: Thu, 10 Nov 2016 11:20:09 -0600 Subject: [PATCH 2/5] Bubble sort --- bubble.rb | 31 +++++++++++++++---------------- merge_sort.rb | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 16 deletions(-) create mode 100644 merge_sort.rb diff --git a/bubble.rb b/bubble.rb index 3ab6c69..3d1f234 100644 --- a/bubble.rb +++ b/bubble.rb @@ -1,20 +1,19 @@ -def bubble_sort - (array.length - 1).times +def bubble_sort(arr) + begin + swapped = false + swapped = compare(arr, swapped) + end until swapped == false + arr end -def compare - +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 -bubble_sort( [1,3,7,2,5] ) - -swapped? = false - -begin - loop compare i i+1 - out of order, swap - swapped? = true - not out of order, move on -end until swapped? = false - -swap = false \ No newline at end of file +p bubble_sort( [1,3,7,2,5] ) diff --git a/merge_sort.rb b/merge_sort.rb new file mode 100644 index 0000000..0f3c714 --- /dev/null +++ b/merge_sort.rb @@ -0,0 +1,32 @@ +def merge_sort + +end + + + + +function mergeSort(array) { + // if the array is one element long, just return it + + // mergeSort() the left half of the array + + // mergeSort() the right half of the array + + // merge() the two halves + + // return the merged array +} + +function merge(leftArr, rightArr){ + + // var newArr = []; + + // compare leftArr[0] and rightArr[0] + // whichever is smaller, push it onto newArr + + // repeat the process, but don't reuse elements, + // until you have pushed all the elements from + // leftArr and rightArr onto newArr in sorted order + + // return newArr +} \ No newline at end of file From 864c5b9f1ee8735ded80e3238a4881547cea5293 Mon Sep 17 00:00:00 2001 From: Catherine Kwak Date: Thu, 10 Nov 2016 10:48:49 -0700 Subject: [PATCH 3/5] Start merge sort --- merge_sort.rb | 55 +++++++++++++++++++++++++-------------------------- 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/merge_sort.rb b/merge_sort.rb index 0f3c714..e52e8c4 100644 --- a/merge_sort.rb +++ b/merge_sort.rb @@ -1,32 +1,31 @@ -def merge_sort +def merge_sort(arr) + return arr if arr.length == 1 -end - - - - -function mergeSort(array) { - // if the array is one element long, just return it - - // mergeSort() the left half of the array - - // mergeSort() the right half of the array + midpoint = (arr.length - 1) / 2 + left = arr[0..midpoint] + right = arr[midpoint..-1] - // merge() the two halves - - // return the merged array -} - -function merge(leftArr, rightArr){ - - // var newArr = []; - - // compare leftArr[0] and rightArr[0] - // whichever is smaller, push it onto newArr + merge(merge_sort(left), merge_sort(right)) +end - // repeat the process, but don't reuse elements, - // until you have pushed all the elements from - // leftArr and rightArr onto newArr in sorted order +def merge(left, right) + merged_arr = [] + + until left.empty? && right.empty? + left_value = left[0] + right_value = right[0] + if right.empty? || left[0] < right[0] + merged_arr << left_value + left = left[1..-1] + left_value = left[0] + elsif left.empty? || left[0] > right[0] + merged_arr << right_value + right = right[1..-1] + right_value = right[0] + end + end + + merged_arr +end - // return newArr -} \ No newline at end of file +p merge_sort([4, 1, 8, 11, 3, 2, 10]) \ No newline at end of file From 1989494244b9603009ddedf7a2c39ee54eeeea1a Mon Sep 17 00:00:00 2001 From: Alexa Date: Thu, 10 Nov 2016 12:16:32 -0600 Subject: [PATCH 4/5] Merge sort --- merge_sort.rb => merge.rb | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) rename merge_sort.rb => merge.rb (66%) diff --git a/merge_sort.rb b/merge.rb similarity index 66% rename from merge_sort.rb rename to merge.rb index e52e8c4..b3ba901 100644 --- a/merge_sort.rb +++ b/merge.rb @@ -1,31 +1,35 @@ def merge_sort(arr) return arr if arr.length == 1 - midpoint = (arr.length - 1) / 2 + midpoint = ((arr.length) - 1) / 2 left = arr[0..midpoint] - right = arr[midpoint..-1] + right = arr[midpoint + 1..-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] - if right.empty? || left[0] < right[0] + + if left_value && (right.empty? || left[0] <= right[0]) merged_arr << left_value left = left[1..-1] left_value = left[0] - elsif left.empty? || left[0] > right[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]) \ No newline at end of file +p merge_sort([4, 1, 8, 11, 3, 2, 10]) From 5cb73be61538f935715714c1f1b21e47de5e7c68 Mon Sep 17 00:00:00 2001 From: Catherine Kwak Date: Thu, 10 Nov 2016 14:41:40 -0700 Subject: [PATCH 5/5] Changes and notes to merge sort from scrum --- merge.rb | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/merge.rb b/merge.rb index b3ba901..89e548b 100644 --- a/merge.rb +++ b/merge.rb @@ -1,9 +1,9 @@ def merge_sort(arr) return arr if arr.length == 1 - midpoint = ((arr.length) - 1) / 2 - left = arr[0..midpoint] - right = arr[midpoint + 1..-1] + midpoint = arr.length / 2 + left = arr[0..midpoint - 1] + right = arr[midpoint..-1] merge(merge_sort(left), merge_sort(right)) end @@ -16,7 +16,9 @@ def merge(left, right) 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]