Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Accompanying documentation on Swift generics at
- // http://dev.iachieved.it/iachievedit/?p=375
- import Foundation
- class Element : NSObject, Comparable, Printable {
- var name:String
- var number:Int
- init(name:String,number:Int) {
- self.name = name
- self.number = number
- }
- override var description: String {
- return "\(self.name) (\(self.number))"
- }
- }
- func == (lhs:Element, rhs:Element) -> Bool {
- return lhs.number == rhs.number
- }
- func < (lhs:Element, rhs:Element) -> Bool {
- return lhs.number < rhs.number
- }
- /*
- * Quicksort algorithm was taken from the Python version
- * at http://hetland.org/coding/python/quicksort.html
- * and converted to Swift in about 2 minutes.
- */
- func partition<T: Comparable>(list: Array<T>, start:Int, end:Int) -> Int {
- var pivot = list[end]
- var bottom = start - 1
- var top = end
- var done:Bool = false
- while (!done) {
- while (!done) {
- bottom += 1
- if (bottom == top) {
- done = true
- break
- }
- if (list[bottom] > pivot) {
- list[top] = list[bottom]
- break
- }
- }
- while (!done) {
- top -= 1
- if (top == bottom) {
- done = true
- break
- }
- if (list[top] < pivot) {
- list[bottom] = list[top]
- break
- }
- }
- }
- list[top] = pivot
- return top
- }
- func quicksort<T: Comparable>(list: Array<T>, start:Int, end:Int) {
- if (start < end) {
- var split = partition(list, start, end)
- quicksort(list, start, split-1)
- quicksort(list, split+1, end)
- }
- }
- var listOfNumbers = [10, 11, 8, 5, 27, 1, 25]
- var listOfNames = ["Joe", "Jane", "Frank", "Marc", "Zach", "Sean"]
- var listOfElements = [Element(name:"Gold", number:79),
- Element(name:"Silver", number:47),
- Element(name:"Zinc", number:30),
- Element(name:"Titanium", number:22),
- Element(name:"Plutonium", number:94)]
- quicksort(listOfNumbers, 0, listOfNumbers.count-1)
- println(listOfNumbers)
- quicksort(listOfNames, 0, listOfNames.count-1)
- println(listOfNames)
- quicksort(listOfElements, 0, listOfElements.count-1)
- println(listOfElements)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement