https://github.com/general-cbic/ruby-heap
Binary or multiple heap (heapsort)
https://github.com/general-cbic/ruby-heap
heapsort ruby sort sorting-algorithms-implemented
Last synced: 5 months ago
JSON representation
Binary or multiple heap (heapsort)
- Host: GitHub
- URL: https://github.com/general-cbic/ruby-heap
- Owner: general-CbIC
- License: mit
- Created: 2017-06-05T14:50:16.000Z (over 8 years ago)
- Default Branch: develop
- Last Pushed: 2025-03-13T04:48:59.000Z (7 months ago)
- Last Synced: 2025-04-16T05:18:23.776Z (6 months ago)
- Topics: heapsort, ruby, sort, sorting-algorithms-implemented
- Language: Ruby
- Homepage:
- Size: 322 KB
- Stars: 5
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE.txt
Awesome Lists containing this project
README
# Heap (ruby heapsort)
[](https://badge.fury.io/rb/ruby-heap)

[](https://rubygems.org/gems/ruby-heap)
[](https://codeclimate.com/github/pups3s/ruby-heap)[Русская версия README](README_ru.md)
Gem is used to create Heap structs and sort via [Heapsort algorithm](https://en.wikipedia.org/wiki/Heapsort).
## Installation
Add this line to your application's Gemfile:
```ruby
gem 'ruby-heap'
```And then execute:
```bash
bundle
```Or install it yourself as:
```bash
gem install ruby-heap
```## Usage
### Binary Heaps
#### Binary Heap with min root
While Heap initialize you can add any comparable object in it (not numbers only).
Objects must have compare functions (>, >=, <, <=).```ruby
require 'Heap'# Initialize
b_heap = Heap::BinaryHeap::MinHeap.new([2, 3, 1, -1])# Return elements in Heap (read access only)
b_heap.elements # [-1, 1, 3, 2]# Return sorted array (heap-sort) without
# changing elements in heap
b_heap.sort # [-1, 1, 2, 3]# Count of elements in Heap
b_heap.count # 4# Return min element without removing from Heap
b_heap.extract_min # -1# Return min element and remove it from Heap
b_heap.extract_min! # -1
b_heap.count # 3
b_heap.elements # [1, 2, 3]# Also you can add elements with "add" function
b_heap.add -1
b_heap.elements # [-1, 1, 3, 2]
b_heap.add [0, 9, 200, -15, 6]
b_heap.elements # [-15, -1, 3, 0, 1, 9, 200, 2, 6]
b_heap.sort # [-15, -1, 0, 1, 2, 3, 6, 9, 200]
```#### Same practice with max root
```ruby
require 'Heap'# Initialize
b_heap = Heap::BinaryHeap::MaxHeap.new([2, 3, 1, -1])# Return elements in Heap (read access only)
b_heap.elements # [3, 2, 1, -1]# Return sorted array (heap-sort) without
# changing elements in heap
b_heap.sort # [3, 2, 1, -1]# Count of elements in Heap
b_heap.count # 4# Return max element without removing from Heap
b_heap.extract_max # 3# Return max element and remove it from Heap
b_heap.extract_max! # 3
b_heap.count # 3
b_heap.elements # [2, -1, 1]# Also you can add elements with "add" function
b_heap.add -1
b_heap.elements # [2, -1, 1, -1]
b_heap.add [0, 9, 200, -15, 6]
b_heap.elements # [200, 6, 9, 0, -1, 1, 2, -15, -1]
b_heap.sort # [200, 9, 6, 2, 1, 0, -1, -1, -15]
```#### Heap merging
```ruby
require 'Heap'# Initialize heaps
min_heap = Heap::BinaryHeap::MinHeap.new [1, 2, 3]
max_heap = Heap::BinaryHeap::MaxHeap.new [9, -1, 4]# Merge heaps
min_heap.add max_heapmin_heap.count # 6
min_heap.sort # [-1, 1, 2, 3, 4, 9]
```### Multiple Heaps
Multiple (d-ary) heaps have **same methods as binary**. But initialize differs:
```ruby
require 'Heap'# First param is "d" of heap
# Second param is optional and can contain first elements
min_heap = Heap::MultipleHeap::MinHeap.new(5, [10, 20, 30])
max_heap = Heap::MultipleHeap::MaxHeap.new(7)
```## Contributing
Bug reports and pull requests are welcome on GitHub at [Project page](https://github.com/pups3s/ruby-heap).
## License
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).