Skip to content

Commit

Permalink
Merge pull request #333 from emadhegab/patch-1
Browse files Browse the repository at this point in the history
Updating Select Minimum Maximum to Swift 3
  • Loading branch information
kelvinlauKL committed Jan 2, 2017
2 parents dd54980 + 998fc13 commit 63ac2e3
Show file tree
Hide file tree
Showing 6 changed files with 113 additions and 110 deletions.
23 changes: 12 additions & 11 deletions Select Minimum Maximum/Maximum.swift
@@ -1,15 +1,16 @@
/*
Finds the maximum value in an array in O(n) time.
*/
Finds the maximum value in an array in O(n) time.
*/

func maximum<T: Comparable>(var array: [T]) -> T? {
guard !array.isEmpty else {
return nil
}
func maximum<T: Comparable>(_ array: [T]) -> T? {
var array = array
guard !array.isEmpty else {
return nil
}

var maximum = array.removeFirst()
for element in array {
maximum = element > maximum ? element : maximum
}
return maximum
var maximum = array.removeFirst()
for element in array {
maximum = element > maximum ? element : maximum
}
return maximum
}
23 changes: 12 additions & 11 deletions Select Minimum Maximum/Minimum.swift
@@ -1,15 +1,16 @@
/*
Finds the minimum value in an array in O(n) time.
*/
Finds the minimum value in an array in O(n) time.
*/

func minimum<T: Comparable>(var array: [T]) -> T? {
guard !array.isEmpty else {
return nil
}
func minimum<T: Comparable>(_ array: [T]) -> T? {
var array = array
guard !array.isEmpty else {
return nil
}

var minimum = array.removeFirst()
for element in array {
minimum = element < minimum ? element : minimum
}
return minimum
var minimum = array.removeFirst()
for element in array {
minimum = element < minimum ? element : minimum
}
return minimum
}
63 changes: 32 additions & 31 deletions Select Minimum Maximum/MinimumMaximumPairs.swift
@@ -1,39 +1,40 @@
/*
Finds the maximum and minimum value in an array in O(n) time.
*/
Finds the maximum and minimum value in an array in O(n) time.
*/

func minimumMaximum<T: Comparable>(var array: [T]) -> (minimum: T, maximum: T)? {
guard !array.isEmpty else {
return nil
}
func minimumMaximum<T: Comparable>(_ array: [T]) -> (minimum: T, maximum: T)? {
var array = array
guard !array.isEmpty else {
return nil
}

var minimum = array.first!
var maximum = array.first!
var minimum = array.first!
var maximum = array.first!

let hasOddNumberOfItems = array.count % 2 != 0
if hasOddNumberOfItems {
array.removeFirst()
}
let hasOddNumberOfItems = array.count % 2 != 0
if hasOddNumberOfItems {
array.removeFirst()
}

while !array.isEmpty {
let pair = (array.removeFirst(), array.removeFirst())
while !array.isEmpty {
let pair = (array.removeFirst(), array.removeFirst())

if pair.0 > pair.1 {
if pair.0 > maximum {
maximum = pair.0
}
if pair.1 < minimum {
minimum = pair.1
}
} else {
if pair.1 > maximum {
maximum = pair.1
}
if pair.0 < minimum {
minimum = pair.0
}
if pair.0 > pair.1 {
if pair.0 > maximum {
maximum = pair.0
}
if pair.1 < minimum {
minimum = pair.1
}
} else {
if pair.1 > maximum {
maximum = pair.1
}
if pair.0 < minimum {
minimum = pair.0
}
}
}
}

return (minimum, maximum)

return (minimum, maximum)
}
9 changes: 6 additions & 3 deletions Select Minimum Maximum/README.markdown
Expand Up @@ -23,7 +23,8 @@ Repeat this process until the all elements in the list have been processed.
Here is a simple implementation in Swift:

```swift
func minimum<T: Comparable>(var array: [T]) -> T? {
func minimum<T: Comparable>(_ array: [T]) -> T? {
var array = array
guard !array.isEmpty else {
return nil
}
Expand All @@ -35,7 +36,8 @@ func minimum<T: Comparable>(var array: [T]) -> T? {
return minimum
}

func maximum<T: Comparable>(var array: [T]) -> T? {
func maximum<T: Comparable>(_ array: [T]) -> T? {
var array = array
guard !array.isEmpty else {
return nil
}
Expand Down Expand Up @@ -89,7 +91,8 @@ The result is a minimum of `3` and a maximum of `9`.
Here is a simple implementation in Swift:

```swift
func minimumMaximum<T: Comparable>(var array: [T]) -> (minimum: T, maximum: T)? {
func minimumMaximum<T: Comparable>(_ array: [T]) -> (minimum: T, maximum: T)? {
var array = array
guard !array.isEmpty else {
return nil
}
Expand Down
@@ -1,64 +1,67 @@
// Compare each item to find minimum
func minimum<T: Comparable>(var array: [T]) -> T? {
guard !array.isEmpty else {
return nil
}
func minimum<T: Comparable>(_ array: [T]) -> T? {
var array = array
guard !array.isEmpty else {
return nil
}

var minimum = array.removeFirst()
for element in array {
minimum = element < minimum ? element : minimum
}
return minimum
var minimum = array.removeFirst()
for element in array {
minimum = element < minimum ? element : minimum
}
return minimum
}

// Compare each item to find maximum
func maximum<T: Comparable>(var array: [T]) -> T? {
guard !array.isEmpty else {
return nil
}
func maximum<T: Comparable>(_ array: [T]) -> T? {
var array = array
guard !array.isEmpty else {
return nil
}

var maximum = array.removeFirst()
for element in array {
maximum = element > maximum ? element : maximum
}
return maximum
var maximum = array.removeFirst()
for element in array {
maximum = element > maximum ? element : maximum
}
return maximum
}

// Compare in pairs to find minimum and maximum
func minimumMaximum<T: Comparable>(var array: [T]) -> (minimum: T, maximum: T)? {
guard !array.isEmpty else {
return nil
}
func minimumMaximum<T: Comparable>(_ array: [T]) -> (minimum: T, maximum: T)? {
var array = array
guard !array.isEmpty else {
return nil
}

var minimum = array.first!
var maximum = array.first!
var minimum = array.first!
var maximum = array.first!

let hasOddNumberOfItems = array.count % 2 != 0
if hasOddNumberOfItems {
array.removeFirst()
}
let hasOddNumberOfItems = array.count % 2 != 0
if hasOddNumberOfItems {
array.removeFirst()
}

while !array.isEmpty {
let pair = (array.removeFirst(), array.removeFirst())
while !array.isEmpty {
let pair = (array.removeFirst(), array.removeFirst())

if pair.0 > pair.1 {
if pair.0 > maximum {
maximum = pair.0
}
if pair.1 < minimum {
minimum = pair.1
}
} else {
if pair.1 > maximum {
maximum = pair.1
}
if pair.0 < minimum {
minimum = pair.0
}
if pair.0 > pair.1 {
if pair.0 > maximum {
maximum = pair.0
}
if pair.1 < minimum {
minimum = pair.1
}
} else {
if pair.1 > maximum {
maximum = pair.1
}
if pair.0 < minimum {
minimum = pair.0
}
}
}
}

return (minimum, maximum)
return (minimum, maximum)
}

// Test of minimum and maximum functions
Expand All @@ -72,5 +75,5 @@ result.minimum
result.maximum

// Built-in Swift functions
array.minElement()
array.maxElement()
array.min()
array.max()

This file was deleted.

0 comments on commit 63ac2e3

Please sign in to comment.