raywenderlich / swift-algorithm-club
- среда, 8 июня 2016 г. в 03:12:26
Swift
Algorithms and data structures in Swift, with explanations!
Here you'll find implementations of popular algorithms and data structures in everyone's favorite new language Swift, with detailed explanations of how they work.
If you're a computer science student who needs to learn this stuff for exams -- or if you're a self-taught programmer who wants to brush up on the theory behind your craft -- you've come to the right place!
The goal of this project is to explain how algorithms work. The focus is on clarity and readability of the code, not on making a reusable library that you can drop into your own projects. That said, most of the code should be ready for production use but you may need to tweak it to fit into your own codebase.
All code is compatible with Xcode 7.3 and Swift 2.2. We'll keep this updated with the latest version of Swift.
This is a work in progress. More algorithms will be added soon. :-)
What are algorithms and data structures? Pancakes!
Why learn algorithms? Worried this isn't your cup of tea? Then read this.
Big-O notation. We often say things like, "This algorithm is O(n)." If you don't know what that means, read this first.
Algorithm design techniques. How do you create your own algorithms?
How to contribute. Report an issue to leave feedback, or submit a pull request.
Under construction. Algorithms that are under construction.
If you're new to algorithms and data structures, here are a few good ones to start out with:
It's fun to see how sorting algorithms work, but in practice you'll almost never have to provide your own sorting routines. Swift's own sort()
is more than up to the job. But if you're curious, read on...
Basic sorts:
Fast sorts:
Special-purpose sorts:
Bad sorting algorithms (don't use these!):
The choice of data structure for a particular task depends on a few things.
First, there is the shape of your data and the kinds of operations that you'll need to perform on it. If you want to look up objects by a key you need some kind of dictionary; if your data is hierarchical in nature you want a tree structure of some sort; if your data is sequential you want a stack or queue.
Second, it matters what particular operations you'll be performing most, as certain data structures are optimized for certain actions. For example, if you often need to find the most important object in a collection, then a heap or priority queue is more optimal than a plain array.
Most of the time using just the built-in Array
, Dictionary
, and Set
types is sufficient, but sometimes you may want something more fancy...
A lot of software developer interview questions consist of algorithmic puzzles. Here is a small selection of fun ones. For more puzzles (with answers), see here and here.
For more information, check out these great books:
The following books are available for free online:
Other algorithm repositories:
All content is licensed under the terms of the MIT open source license.