class Array

Public Instance Methods

bubble_sort() click to toggle source
# File lib/food/sort.rb, line 30
def bubble_sort()
  clone_array = self.clone
  
  (1...clone_array.size).each { |i|
    (0...(clone_array.size - i)).each { |j|
      clone_array.swap!(j, j+1) if (clone_array[j] > clone_array[j+1])
    }
  }
  
  clone_array
end
bubble_sort!() click to toggle source
# File lib/food/sort.rb, line 42
def bubble_sort!()
  self.replace(self.bubble_sort())
end
bubble_sort_imp() click to toggle source
# File lib/food/sort.rb, line 14
def bubble_sort_imp()
  clone_array = self.clone
  
  for i in 1...clone_array.size
      for j in 0...(clone_array.size - i)
          clone_array.swap!(j, j+1) if (clone_array[j] > clone_array[j+1])
      end
  end
  
  clone_array
end
bubble_sort_imp!() click to toggle source
# File lib/food/sort.rb, line 26
def bubble_sort_imp!()
  self.replace(self.bubble_sort_imp())
end
merge_sort() click to toggle source
# File lib/food/sort.rb, line 46
def merge_sort()
  split_array(self)
end
merge_sort_imp() click to toggle source
# File lib/food/sort.rb, line 50
def merge_sort_imp()
  split_array(self)
end
swap(i, j) click to toggle source

Swap changes elements in position!

# File lib/food/sort.rb, line 4
def swap(i, j)
  clone_array = self.clone
  clone_array[i], clone_array[j] = clone_array[j], clone_array[i]
  clone_array
end
swap!(i, j) click to toggle source
# File lib/food/sort.rb, line 10
def swap!(i, j)
  self[i], self[j] = self[j], self[i]
end

Private Instance Methods

merge_arrays(array_1, array_2) click to toggle source
# File lib/food/sort.rb, line 117
def merge_arrays(array_1, array_2)
  sorted_array = Array.new()
  
  while (array_1.any? && array_2.any?)  # Iterador array_3
    if (array_1[0] <= array_2[0])
      sorted_array.push(array_1[0])
      array_1.delete_at(0)
    else
      sorted_array.push(array_2[0])
      array_2.delete_at(0)
    end
  end
  
  sorted_array.concat(array_1) if array_1.any?
  sorted_array.concat(array_2) if array_2.any?
  return sorted_array
end
merge_arrays_imp(array_1, array_2) click to toggle source
# File lib/food/sort.rb, line 72
def merge_arrays_imp(array_1, array_2)
  sorted_array = Array.new()
  
  i = 0 # Iterador array_1
  j = 0 # Iterador array_2
  
  while ((i < array_1.size) && (j < array_2.size))  # Iterador array_3
    if (array_1[i] <= array_2[j])
      sorted_array.push(array_1[i])
      i = i+1
    else
      sorted_array.push(array_2[j])
      j = j+1
    end
  end
  
  while(i < array_1.size)
    sorted_array.push(array_1[i])
    i = i+1
  end
  
  while(j < array_2.size)
    sorted_array.push(array_2[j])
      j = j+1
  end
  
  return sorted_array
end
split_array(sorted_array) click to toggle source
# File lib/food/sort.rb, line 101
def split_array(sorted_array)
  if (sorted_array.size <= 2)
    if ((sorted_array.size == 2) && (sorted_array[0] > sorted_array[1]))
      return sorted_array.swap!(0, 1)
    else
      return sorted_array
    end
  end
    
  middle = sorted_array.size / 2
  array_1 = split_array(sorted_array[0...middle])
  array_2 = split_array(sorted_array[middle...sorted_array.size])
  
  return merge_arrays(array_1, array_2)
end
split_array_imp(sorted_array) click to toggle source
# File lib/food/sort.rb, line 56
def split_array_imp(sorted_array)
  if (sorted_array.size <= 2)
    if ((sorted_array.size == 2) && (sorted_array[0] > sorted_array[1]))
      return sorted_array.swap(0, 1) 
    else
      return sorted_array
    end
  else
    middle = sorted_array.size / 2
    array_1 = split_array(sorted_array[0...middle])
    array_2 = split_array(sorted_array[middle...sorted_array.size])
    
    return merge_arrays(array_1, array_2)
  end
end