Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Functional way to write Sorting algorithm #79

Open
Manupendra opened this issue Oct 1, 2023 · 7 comments
Open

Functional way to write Sorting algorithm #79

Manupendra opened this issue Oct 1, 2023 · 7 comments

Comments

@Manupendra
Copy link

Manupendra commented Oct 1, 2023

I can see the imperative code in sorting algorithm, I'm intending to add in functional way
for e.g. In MergeSort , I can see while loop which is an iterative approach -

while (k < high + 1) {
        // must check if empty to avoid exceptions
        if (i > left.length - 1) {
          array(k) = right(j)
          j = j + 1
        } else if (j > right.length - 1) {
          array(k) = left(i)
          i = i + 1
        } else if (left(i) <= right(j)) {
          array(k) = left(i)
          i = i + 1
        } else {
          array(k) = right(j)
          j = j + 1
        }
        k = k + 1
      }

Best Practice: In scala, we follow functional way to write it

def merge(xs: List[Int], ys: List[Int]): List[Int] = (xs, ys) match {
    // If either list is empty, return the other list
    case (Nil, _) => ys
    case (_, Nil) => xs
    // If the first element of xs is smaller than the first element of ys,
    // append it to the result of merging the rest of xs with ys
    case (x :: xtail, y :: ytail) =>
      if (x < y) x :: merge(xtail, ys)
      // Otherwise, append the first element of ys to the result of merging xs with the rest of ys
      else y :: merge(xs, ytail)
  }

I'll be creating a PR shortly to add functional code for sorting algorithm given in this repo.

@Manupendra
Copy link
Author

@Panquesito7 @andreicioban I just found exciting repo, I've suggested some enhancements and can be this be considered as a hacktoberfest contributions?

@Panquesito7
Copy link
Member

@Panquesito7 @andreicioban I just found exciting repo, I've suggested some enhancements and can be this be considered as a hacktoberfest contributions?

Hey there! Of course! I do not know Scala or maintain this repository except for cleanup and documentation, but of course, it can be considered for Hacktoberfest. 🙂

@Manupendra
Copy link
Author

@Panquesito7 @andreicioban I just found exciting repo, I've suggested some enhancements and can be this be considered as a hacktoberfest contributions?

Hey there! Of course! I do not know Scala or maintain this repository except for cleanup and documentation, but of course, it can be considered for Hacktoberfest. 🙂

@Panquesito7 Any point of contact who can review my PR ?

@carsten-langer
Copy link

Hi, I'm not a maintainer, but could contribute. I agree with @Manupendra that the old sort implementations are in an imperative style. The the new implementations using a functional style are much more "Scala-like".
Besides a bit of typos in comments and formatting cleanup, both new algorithms look good to me.

@Manupendra
Copy link
Author

Hi, I'm not a maintainer, but could contribute. I agree with @Manupendra that the old sort implementations are in an imperative style. The the new implementations using a functional style are much more "Scala-like". Besides a bit of typos in comments and formatting cleanup, both new algorithms look good to me.

Let me fix me that in my PR those typos and formats

@carsten-langer
Copy link

Hi @Panquesito7 would you mind accepting this PR from @Manupendra?
Some clean up was done in the PR and as written earlier, the algorithms look fine and "Scala-like".

@Panquesito7
Copy link
Member

Hi @Panquesito7 would you mind accepting this PR from @Manupendra? Some clean up was done in the PR and as written earlier, the algorithms look fine and "Scala-like".

I don't know anything about Scala, but if you think it's fine, we can merge it. 🙂
We're looking for some maintainers in repositories such as this one.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants