protocol ArraySort {
func sortArray(intArray:[Int]) -> [Int]
}
class SimpleSort:ArraySort {
func sortArray(intArray: [Int]) -> [Int] {
var sortedArray = intArray
var k = 0
for i in stride(from: sortedArray.count-1, to: 0, by: -1) {
for j in 0...(i-1) {
if sortedArray[j] >= sortedArray[i] {
k = sortedArray[i]
sortedArray[i] = sortedArray[j]
sortedArray[j] = k
}
}
}
return sortedArray
}
}
class BubbleSort:ArraySort {
private var sortedArray: [Int] = []
func sortArray(intArray: [Int]) -> [Int] {
sortedArray = intArray
return sort()
}
private func sort() -> [Int] {
var k = 0
for i in 0..<sortedArray.count-1 {
if sortedArray[i] < sortedArray[i+1] {
continue
}
k = sortedArray[i]
sortedArray[i] = sortedArray[i+1]
sortedArray[i+1] = k
sort()
}
return sortedArray
}
}
class ArrayStatistics {
private var sortedArray: [Int]
init(intArray:[Int],sorter:ArraySort) {
self.sortedArray = sorter.sortArray(intArray: intArray)
}
func calculateSmallestNumber() -> Int {
return sortedArray[0]
}
func calculateBiggestNumber() -> Int {
return sortedArray.last!
}
func calculateMedian() -> Double {
if sortedArray.count%2 == 0 {
return (Double(sortedArray[(sortedArray.count/2)] + sortedArray[(sortedArray.count/2)-1]) / 2)
}
return Double(sortedArray[sortedArray.count/2])
}
}
let arrayStatistics = ArrayStatistics(intArray: [3,1,10,185,37,4,6], sorter: SimpleSort())
print("\(arrayStatistics.calculateBiggestNumber())")
print("\(arrayStatistics.calculateSmallestNumber())")
print("\(arrayStatistics.calculateMedian())")