|
7 | 7 | //
|
8 | 8 |
|
9 | 9 | func mergeSort<T: Comparable>(_ array: [T]) -> [T] {
|
10 |
| - guard array.count > 1 else { return array } |
11 |
| - let middleIndex = array.count / 2 |
12 |
| - let leftArray = mergeSort(Array(array[0..<middleIndex])) |
13 |
| - let rightArray = mergeSort(Array(array[middleIndex..<array.count])) |
14 |
| - return merge(leftPile: leftArray, rightPile: rightArray) |
| 10 | + guard array.count > 1 else { return array } |
| 11 | + let middleIndex = array.count / 2 |
| 12 | + let leftArray = mergeSort(Array(array[0..<middleIndex])) |
| 13 | + let rightArray = mergeSort(Array(array[middleIndex..<array.count])) |
| 14 | + return merge(leftPile: leftArray, rightPile: rightArray) |
15 | 15 | }
|
16 | 16 |
|
17 | 17 | func merge<T: Comparable>(leftPile: [T], rightPile: [T]) -> [T] {
|
18 |
| - var leftIndex = 0 |
19 |
| - var rightIndex = 0 |
20 |
| - var orderedPile = [T]() |
21 |
| - |
22 |
| - while leftIndex < leftPile.count && rightIndex < rightPile.count { |
23 |
| - if leftPile[leftIndex] < rightPile[rightIndex] { |
24 |
| - orderedPile.append(leftPile[leftIndex]) |
25 |
| - leftIndex += 1 |
26 |
| - } else if leftPile[leftIndex] > rightPile[rightIndex] { |
27 |
| - orderedPile.append(rightPile[rightIndex]) |
28 |
| - rightIndex += 1 |
29 |
| - } else { |
30 |
| - orderedPile.append(leftPile[leftIndex]) |
31 |
| - leftIndex += 1 |
32 |
| - orderedPile.append(rightPile[rightIndex]) |
33 |
| - rightIndex += 1 |
34 |
| - } |
35 |
| - } |
36 |
| - |
37 |
| - while leftIndex < leftPile.count { |
38 |
| - orderedPile.append(leftPile[leftIndex]) |
39 |
| - leftIndex += 1 |
40 |
| - } |
41 |
| - |
42 |
| - while rightIndex < rightPile.count { |
43 |
| - orderedPile.append(rightPile[rightIndex]) |
44 |
| - rightIndex += 1 |
45 |
| - } |
46 |
| - |
47 |
| - return orderedPile |
| 18 | + var leftIndex = 0 |
| 19 | + var rightIndex = 0 |
| 20 | + var orderedPile = [T]() |
| 21 | + |
| 22 | + while leftIndex < leftPile.count && rightIndex < rightPile.count { |
| 23 | + if leftPile[leftIndex] < rightPile[rightIndex] { |
| 24 | + orderedPile.append(leftPile[leftIndex]) |
| 25 | + leftIndex += 1 |
| 26 | + } else if leftPile[leftIndex] > rightPile[rightIndex] { |
| 27 | + orderedPile.append(rightPile[rightIndex]) |
| 28 | + rightIndex += 1 |
| 29 | + } else { |
| 30 | + orderedPile.append(leftPile[leftIndex]) |
| 31 | + leftIndex += 1 |
| 32 | + orderedPile.append(rightPile[rightIndex]) |
| 33 | + rightIndex += 1 |
| 34 | + } |
| 35 | + } |
| 36 | + |
| 37 | + while leftIndex < leftPile.count { |
| 38 | + orderedPile.append(leftPile[leftIndex]) |
| 39 | + leftIndex += 1 |
| 40 | + } |
| 41 | + |
| 42 | + while rightIndex < rightPile.count { |
| 43 | + orderedPile.append(rightPile[rightIndex]) |
| 44 | + rightIndex += 1 |
| 45 | + } |
| 46 | + |
| 47 | + return orderedPile |
48 | 48 | }
|
49 | 49 |
|
50 | 50 | /*
|
|
0 commit comments