fastsort 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 12702d25d0475df203ee081b543e8a9d715b086fd561b0f5c550cf0848fa4de2
4
- data.tar.gz: 8fba45cfd6374245cde79cac4c26f7856a726d5a35081cbbf67e749da589d863
3
+ metadata.gz: 8d86a8ff31ddc7b969d1a9b917813710b69f8ad0f2aef649f7faba7afcfd751a
4
+ data.tar.gz: 3eca0655b2567839b287a05b322b51862409a2a62c5ce2b0f79afcd0df3729d9
5
5
  SHA512:
6
- metadata.gz: d45f75d7834d313ea818cb70ba2d0d329257fe91700f30f090daace3d00b8478f15a29276b4ae5794e6777bb292be7f54cdb62cba9b426a5e829ffb71d1e4615
7
- data.tar.gz: 83ae98469a47a75ef41c80c0ec14ec24b065c055419f189ff454e3fc843568185499caed3776941251e88173eff46668580e79ef552e9162ba38f6d71e93fe5b
6
+ metadata.gz: 380b01d08738b1293bec578ffee49a64e73298d63bcdcd1b35524b1949a85a4dc743e08da69326429cb6591cad71bc48a09510914e0f7b4f2e88d107e67a9af0
7
+ data.tar.gz: b1ba27cb343db13bc6fd87b7296f7f41d021cc47fac0031213c30256de567ffa7f512dd2a8d4a9955adfb0e761e66031ddad44ab288845158b82b40909061485
data/README.md CHANGED
@@ -1,42 +1,42 @@
1
- # Fastsort
2
-
3
- Fastsort is a Ruby gem that provides an efficient sorting algorithm for arrays.
4
-
5
- ## Installation
6
-
7
- Add this line to your application's Gemfile:
8
-
9
- ```ruby
10
- $ gem install 'fastsort'
11
- $ bundle install
12
- ```
13
-
14
- # Gemfile
15
-
16
- gem 'fastsort'
17
-
18
- ## Example usage
19
-
20
- ```bash
21
- require 'fastsort'
22
-
23
- arr = [
24
- 75, 79, 21, 30, 12, 85, 24, 6, 66, 69,
25
- 92, 98, 18, 57, 40, 71, 92, 14, 1, 79,
26
- 15, 21, 55, 83, 45, 34, 25, 67, 9, 75,
27
- 83, 75, 99, 10, 41, 63, 79, 22, 80, 7,
28
- 38, 87, 31, 93, 60, 53, 39, 59, 67, 97
29
- ]
30
-
31
- sorter = Fastsort::Quicksort.new(arr)
32
-
33
- sorter.sort_array
34
-
35
- puts "Sorted Array: #{sorter.array}"
36
- ```
37
-
38
- ## Development
39
- After checking out the repo, run bin/setup to install dependencies. You can also run bin/console for an interactive prompt that will allow you to experiment.
40
-
41
- ## Contributing
1
+ # Fastsort
2
+
3
+ Fastsort is a Ruby gem that provides an efficient sorting algorithm for arrays.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ $ gem install 'fastsort'
11
+ $ bundle install
12
+ ```
13
+
14
+ ## TODO
15
+ Add more efficient sorting algorithms for arrays and arrays of objects...
16
+
17
+
18
+ ## Example usage
19
+
20
+ ```bash
21
+ require 'fastsort'
22
+
23
+ arr = [
24
+ 75, 79, 21, 30, 12, 85, 24, 6, 66, 69,
25
+ 92, 98, 18, 57, 40, 71, 92, 14, 1, 79,
26
+ 15, 21, 55, 83, 45, 34, 25, 67, 9, 75,
27
+ 83, 75, 99, 10, 41, 63, 79, 22, 80, 7,
28
+ 38, 87, 31, 93, 60, 53, 39, 59, 67, 97
29
+ ]
30
+
31
+ sorter = Fastsort::Quicksort.new(arr)
32
+
33
+ sorter.sort_array
34
+
35
+ puts "Sorted Array: #{sorter.array}"
36
+ ```
37
+
38
+ ## Development
39
+ After checking out the repo, run bin/setup to install dependencies. You can also run bin/console for an interactive prompt that will allow you to experiment.
40
+
41
+ ## Contributing
42
42
  Bug reports and pull requests are welcome on GitHub at https://github.com/dants0/fastsort.
data/Rakefile CHANGED
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: true
2
-
3
- require "bundler/gem_tasks"
4
- task default: %i[]
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ task default: %i[]
Binary file
data/fastsort.gemspec CHANGED
@@ -1,39 +1,39 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "lib/fastsort/version"
4
-
5
- Gem::Specification.new do |spec|
6
- spec.name = "fastsort"
7
- spec.version = Fastsort::VERSION
8
- spec.authors = ["Dants0"]
9
- spec.email = ["gui.dg1@hotmail.com"]
10
-
11
- spec.summary = "a fast array sorter"
12
- spec.description = "Designed to efficiently organize the elements of an array in a specific order. Sorting is a fundamental operation in computer science and data processing, and the performance of a sorting algorithm is crucial."
13
- spec.homepage = "https://rubygems.org/gems/fastsort"
14
- spec.required_ruby_version = ">= 2.6.0"
15
-
16
- spec.metadata["allowed_push_host"] = "https://rubygems.org"
17
-
18
- spec.metadata["homepage_uri"] = spec.homepage
19
- spec.metadata["source_code_uri"] = "https://github.com/Dants0/fastsort"
20
- spec.metadata["changelog_uri"] = "https://github.com/Dants0/fastsort"
21
-
22
- # Specify which files should be added to the gem when it is released.
23
- # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
24
- spec.files = Dir.chdir(__dir__) do
25
- `git ls-files -z`.split("\x0").reject do |f|
26
- (File.expand_path(f) == __FILE__) ||
27
- f.start_with?(*%w[bin/ test/ spec/ features/ .git appveyor Gemfile])
28
- end
29
- end
30
- spec.bindir = "exe"
31
- spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
32
- spec.require_paths = ["lib"]
33
-
34
- # Uncomment to register a new dependency of your gem
35
- # spec.add_dependency "example-gem", "~> 1.0"
36
-
37
- # For more information and examples about making a new gem, check out our
38
- # guide at: https://bundler.io/guides/creating_gem.html
39
- end
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/fastsort/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "fastsort"
7
+ spec.version = Fastsort::VERSION
8
+ spec.authors = ["Dants0"]
9
+ spec.email = ["gui.dg1@hotmail.com"]
10
+
11
+ spec.summary = "a fast array sorter"
12
+ spec.description = "Designed to efficiently organize the elements of an array in a specific order. Sorting is a fundamental operation in computer science and data processing, and the performance of a sorting algorithm is crucial."
13
+ spec.homepage = "https://rubygems.org/gems/fastsort"
14
+ spec.required_ruby_version = ">= 2.6.0"
15
+
16
+ spec.metadata["allowed_push_host"] = "https://rubygems.org"
17
+
18
+ spec.metadata["homepage_uri"] = spec.homepage
19
+ spec.metadata["source_code_uri"] = "https://github.com/Dants0/fastsort"
20
+ spec.metadata["changelog_uri"] = "https://github.com/Dants0/fastsort"
21
+
22
+ # Specify which files should be added to the gem when it is released.
23
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
24
+ spec.files = Dir.chdir(__dir__) do
25
+ `git ls-files -z`.split("\x0").reject do |f|
26
+ (File.expand_path(f) == __FILE__) ||
27
+ f.start_with?(*%w[bin/ test/ spec/ features/ .git appveyor Gemfile])
28
+ end
29
+ end
30
+ spec.bindir = "exe"
31
+ spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
32
+ spec.require_paths = ["lib"]
33
+
34
+ # Uncomment to register a new dependency of your gem
35
+ # spec.add_dependency "example-gem", "~> 1.0"
36
+
37
+ # For more information and examples about making a new gem, check out our
38
+ # guide at: https://bundler.io/guides/creating_gem.html
39
+ end
@@ -1,5 +1,5 @@
1
- # frozen_string_literal: true
2
-
3
- module Fastsort
4
- VERSION = "0.1.0"
5
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Fastsort
4
+ VERSION = "0.1.1"
5
+ end
data/lib/fastsort.rb CHANGED
@@ -40,4 +40,45 @@ module Fastsort
40
40
  array[idx_a], array[idx_b] = array[idx_b], array[idx_a]
41
41
  end
42
42
  end
43
+
44
+ class Mergesort
45
+ attr_accessor :array
46
+
47
+ def initialize(array)
48
+ @array = array
49
+ end
50
+
51
+ def sort_array
52
+ return array if array.length <= 1
53
+
54
+ middle = array.length / 2
55
+ left_half = array[0...middle]
56
+ right_half = array[middle..-1]
57
+
58
+ left_half = Mergesort.new(left_half).sort_array
59
+ right_half = Mergesort.new(right_half).sort_array
60
+
61
+ merge(left_half, right_half)
62
+ end
63
+
64
+ def merge(left, right)
65
+ result = []
66
+ left_idx = right_idx = 0
67
+
68
+ while left_idx < left.length && right_idx < right.length
69
+ if left[left_idx] < right[right_idx]
70
+ result << left[left_idx]
71
+ left_idx += 1
72
+ else
73
+ result << right[right_idx]
74
+ right_idx += 1
75
+ end
76
+ end
77
+
78
+ result.concat(left[left_idx..-1]) if left_idx < left.length
79
+ result.concat(right[right_idx..-1]) if right_idx < right.length
80
+
81
+ result
82
+ end
83
+ end
43
84
  end
data/main.rb CHANGED
@@ -1,15 +1,18 @@
1
- require_relative './lib/fastsort'
1
+ require_relative "./lib/fastsort"
2
2
 
3
3
  arr = [
4
4
  75, 79, 21, 30, 12, 85, 24, 6, 66, 69,
5
5
  92, 98, 18, 57, 40, 71, 92, 14, 1, 79,
6
6
  15, 21, 55, 83, 45, 34, 25, 67, 9, 75,
7
7
  83, 75, 99, 10, 41, 63, 79, 22, 80, 7,
8
- 38, 87, 31, 93, 60, 53, 39, 59, 67, 97
8
+ 38, 87, 31, 93, 60, 53, 39, 59, 67, 97,
9
9
  ]
10
10
 
11
- sorter = Fastsort::Quicksort.new(arr)
11
+ sorter_001 = Fastsort::Quicksort.new(arr)
12
+ sorter_002 = Fastsort::Mergesort.new(arr)
12
13
 
13
- sorter.sort_array
14
+ sorter_001.sort_array
15
+ sorter_002.sort_array
14
16
 
15
- puts "Sorted Array: #{sorter.array}"
17
+ # puts "Sorted Array: #{sorter_001.array}"
18
+ puts "Sorted Array: #{sorter_002.array}"
data/sig/fastsort.rbs CHANGED
@@ -1,4 +1,4 @@
1
- module Fastsort
2
- VERSION: String
3
- # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
- end
1
+ module Fastsort
2
+ VERSION: String
3
+ # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastsort
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dants0
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-12-27 00:00:00.000000000 Z
11
+ date: 2023-12-28 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Designed to efficiently organize the elements of an array in a specific
14
14
  order. Sorting is a fundamental operation in computer science and data processing,
@@ -21,6 +21,7 @@ extra_rdoc_files: []
21
21
  files:
22
22
  - README.md
23
23
  - Rakefile
24
+ - fastsort-0.1.0.gem
24
25
  - fastsort.gemspec
25
26
  - lib/fastsort.rb
26
27
  - lib/fastsort/version.rb