An experimental classroom to learn/teach algorithms and data structures with Swift
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
Assignments/Sorting
images
.gitignore
COC.md
LICENSE
README.md

README.md

banner.jpg

Join the chat at https://gitter.im/gmertk/SwiftAlgorithmsClassroom

A classroom where you can learn/teach common algorithms and data structures with Swift. Inspired by this blog post Always Be Coding and this repository Hapijs University.

Every few days an assignment will be given by creating an issue. You will fork this repository and send a pull request as your solution to the issue. We will do peer-review by commenting others' solutions. We will learn and teach all together.

The topics are:

  • Sorting
  • Searching
    • Binary search
    • Binary search trees
    • Balanced search trees like red-black trees.
  • Graph Theory
    • Graph data structure alternatives
    • Stacks and queues
    • Depth-first search
    • Breadth-first search
    • Topological sort
    • Minimum spanning trees
    • Shortest paths, and hopefully more.

It is better if you are familiar with Swift, at least read the Swift book from Apple. The assignments will provide enough information to get you started, but mostly it will not repeat the info written in the algorithms books. You are encouraged to do the research on your own. The real benefit of this project comes from the peer-review of the solutions.

If you get stuck at some point, go and check others' solutions. But don't just copy it. After you've read the solution, simply look away, and see what you can recall from you've just read. Try to implement your own solution. Usually the first time you truly understand something is when you can actually do it yourself.

When writing your solutions, follow the RayWenderlich Swift Style Guide. One exception is that I prefer to use 4-space indentation instead of 2.

Contributing

Like the idea? You could really help with any of the following:

  • Suggest content, assignments, etc.
  • Write assignments, tutorials, examples, etc.
  • Help others by reviewing their solutions.
  • Fix any bugs you found.
  • Don't forget to be respectful all the time. Please read the Contributor Code of Conduct. You agree to abide its terms by participating in this project.