Advertisement
Guest User

Quicksort In Swift

a guest
Jul 8th, 2014
511
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.43 KB | None | 0 0
  1. // Accompanying documentation on Swift generics at
  2. // http://dev.iachieved.it/iachievedit/?p=375
  3. import Foundation
  4.  
  5. class Element : NSObject, Comparable, Printable {
  6.     var name:String
  7.     var number:Int
  8.     init(name:String,number:Int) {
  9.         self.name   = name
  10.         self.number = number
  11.     }
  12.  
  13.     override var description: String {
  14.         return "\(self.name) (\(self.number))"
  15.     }
  16. }
  17.  
  18. func == (lhs:Element, rhs:Element) -> Bool {
  19.     return lhs.number == rhs.number
  20. }
  21. func < (lhs:Element, rhs:Element) -> Bool {
  22.     return lhs.number < rhs.number
  23. }
  24.  
  25. /*
  26.  * Quicksort algorithm was taken from the Python version
  27.  * at http://hetland.org/coding/python/quicksort.html
  28.  * and converted to Swift in about 2 minutes.
  29.  */
  30. func partition<T:  Comparable>(list: Array<T>, start:Int, end:Int) -> Int {
  31.  
  32.     var pivot  = list[end]
  33.     var bottom = start - 1
  34.     var top    = end
  35.  
  36.     var done:Bool = false
  37.     while (!done) {
  38.         while (!done) {
  39.             bottom += 1
  40.             if (bottom == top) {
  41.                 done = true
  42.                 break
  43.             }
  44.             if (list[bottom] > pivot) {
  45.                 list[top] = list[bottom]
  46.                 break
  47.             }
  48.         }
  49.        
  50.         while (!done) {
  51.             top -= 1
  52.             if (top == bottom) {
  53.                 done = true
  54.                 break
  55.             }
  56.             if (list[top] < pivot) {
  57.                 list[bottom] = list[top]
  58.                 break
  59.             }
  60.         }
  61.     }
  62.  
  63.     list[top] = pivot
  64.     return top
  65.  
  66. }
  67.  
  68. func quicksort<T:  Comparable>(list:  Array<T>, start:Int, end:Int) {
  69.     if (start  < end) {
  70.         var split = partition(list, start, end)
  71.         quicksort(list, start, split-1)
  72.         quicksort(list, split+1, end)
  73.     }
  74. }
  75.  
  76. var listOfNumbers  = [10, 11, 8, 5, 27, 1, 25]
  77. var listOfNames    = ["Joe", "Jane", "Frank", "Marc", "Zach", "Sean"]
  78. var listOfElements = [Element(name:"Gold",      number:79),
  79.                       Element(name:"Silver",    number:47),
  80.                       Element(name:"Zinc",      number:30),
  81.                       Element(name:"Titanium",  number:22),
  82.                       Element(name:"Plutonium", number:94)]
  83.  
  84. quicksort(listOfNumbers, 0, listOfNumbers.count-1)
  85.  
  86. println(listOfNumbers)
  87.  
  88. quicksort(listOfNames, 0, listOfNames.count-1)
  89.  
  90. println(listOfNames)
  91.  
  92. quicksort(listOfElements, 0, listOfElements.count-1)
  93.  
  94. println(listOfElements)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement