Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Share, discuss and improve algorithm implementations!
JavaScript Java C++ C Python
branch: master

This branch is 1357 commits behind kennyledet:master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
Bubble_Sort
Hamming_Code/Java
Hamming_Weight/C
Insertion_Sort
Knapsack/Java
Kruskal_Minimum_Spanning_Tree/C
Merge_Sort
Quick_Sort
Radix_Sort/Java
Selection_Sort/Python
Token_Bucket/Javascript
ranrot-b_prng/C
README.md

README.md

Algorithm Implementations

(note: there is a backstory on my motivation for starting this at the bottom of this README)

Purpose

We see tons of interesting projects that are actively contributed to here on Github. Seriously, it's very powerful.

Unfortunately, I haven't really spotted (a popular and language agnostic) one where people used the power of Git to share, discover, discuss and improve algorithm implementations!

Send me a pull request, and I will add any implementation of any algorithm you have.

Conventions

  • Language doesn't matter. Just make sure you're implementing an algorithm.
  • Submissions should follow this directory structure

    Algorithm_Name/Language_Name/username_filename.extension
    
  • It is preferred that you prepend or append your files with your Github username or some identifier to avoid overwriting others' implementations. git blame is cool, and has many more appropriate applications, but in this context I'd rather pull a flat list of files and be able to check out everyone's contributions that way than have to look through the revisions.

  • Have fun!

Resources

We should also keep a curated list of resources dealing with algorithms.

Introductory Books

Sites

Thanks to everyone in the HN thread who've been suggesting links. I'm going to try and get some sleep, but I will add a thank you note with everyone's screenname by their recommendation in the morning.

Backstory

I have been "coding" since I was about 12, and have been teaching myself software engineering principles through solving problems in various languages through practice, freelance work and my own projects.

But, you see, it wasn't until a couple of years ago in high school when I started to truly see the light about how languages are merely tools; I basically realized what is common sense to me now - to truly be able to call one's self a proficient programmer, one must go beyond simple syntax slinging and be capable of efficiently solving a much wider subset of problems within computer programming than the average programmer.

Of course, this was merely one of the initial revelations that led to the revelation that ultimately led to this repository.

When I decided to become a Computer Science major, I took the initiative to research actual Computer Science topics, outside of class, as I've always been more of a self-learner.

Lo and behold, CS and practical software engineering turned out to be two entirely different things.

I won't go into my whole journey up til this point in this README, but tl;dr:

There are many problem domains which are simply closed off to the programmer who stagnates in his learning and never studies how to analyze algorithms and develop his own. This is objectively true.

I also have a much greater level of respect towards my profession now, and take it very seriously. I have a relatively rigorous base education roadmap that I've laid out for myself. Even being just a core subset of skills from which I will base subsequently developed skills on, it's quite expansive and diverse. I do not plan on stagnating, ever.

Something went wrong with that request. Please try again.