Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 31a63d1

Browse files
Refactor
1 parent a1e7834 commit 31a63d1

File tree

15 files changed

+122
-85
lines changed

15 files changed

+122
-85
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package pl.dmichalski.algorithms._9_sorting
2+
3+
class SortServiceRunner {
4+
5+
companion object {
6+
fun runTestCase(vararg sortServices: SortService) {
7+
val values = intArrayOf(3, 2, 5, 1, 4, 2, 22, -2)
8+
9+
println("Before sorting: ${values.contentToString()}")
10+
11+
for (sortService in sortServices) {
12+
val result = sortService.sort(values)
13+
println("After sorting: ${result.contentToString()}")
14+
}
15+
}
16+
}
17+
18+
}

‎src/main/kotlin/pl/dmichalski/algorithms/_9_sorting/bubble/BubbleSortOptimizedService.kt‎

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,23 +11,24 @@ import pl.dmichalski.algorithms._9_sorting.SortService
1111
internal class BubbleSortOptimizedService : SortService {
1212

1313
override fun sort(values: IntArray): IntArray {
14-
val n = values.size
14+
val valuesCopy = values.copyOf()
15+
val n = valuesCopy.size
1516
for (i in 0 until n - 1) {
1617
var noSwaps = true
1718
for (j in 0 until n - i - 1) {
18-
if (values[j] > values[j + 1]) {
19+
if (valuesCopy[j] > valuesCopy[j + 1]) {
1920
noSwaps = false
20-
val tmp = values[j]
21-
values[j] = values[j + 1]
22-
values[j + 1] = tmp
21+
val tmp = valuesCopy[j]
22+
valuesCopy[j] = valuesCopy[j + 1]
23+
valuesCopy[j + 1] = tmp
2324
}
2425
}
2526
if (noSwaps) {
2627
break
2728
}
2829
}
2930

30-
return values
31+
return valuesCopy
3132
}
3233

3334
}

‎src/main/kotlin/pl/dmichalski/algorithms/_9_sorting/bubble/BubbleSortService.kt‎

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,19 @@ import pl.dmichalski.algorithms._9_sorting.SortService
1111
internal class BubbleSortService : SortService {
1212

1313
override fun sort(values: IntArray): IntArray {
14-
val n = values.size
14+
val valuesCopy = values.copyOf()
15+
val n = valuesCopy.size
1516
for (i in 0 until n - 1) {
1617
for (j in 0 until n - i - 1) {
17-
if (values[j] > values[j + 1]) {
18-
val tmp = values[j]
19-
values[j] = values[j + 1]
20-
values[j + 1] = tmp
18+
if (valuesCopy[j] > valuesCopy[j + 1]) {
19+
val tmp = valuesCopy[j]
20+
valuesCopy[j] = valuesCopy[j + 1]
21+
valuesCopy[j + 1] = tmp
2122
}
2223
}
2324
}
2425

25-
return values
26+
return valuesCopy
2627
}
2728

2829
}
Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package pl.dmichalski.algorithms._9_sorting.bubble
22

3+
import pl.dmichalski.algorithms._9_sorting.SortServiceRunner
4+
35
/**
46
* Write a function called sort, that accepts integer array
57
* and returns sorted array using buble sort algorithm.
@@ -8,16 +10,8 @@ object Runner {
810

911
@JvmStatic
1012
fun main(args: Array<String>) {
11-
val values = intArrayOf(3, 2, 5, 1, 4)
12-
13-
val sortService = BubbleSortService()
14-
val sortOptimizedService = BubbleSortOptimizedService()
15-
16-
val result1 = sortService.sort(values)
17-
val result2 = sortOptimizedService.sort(values)
18-
19-
println("Before sorting: ${values.contentToString()}")
20-
println("After sorting with bubble sort: ${result1.contentToString()}")
21-
println("After sorting with optimized bubble sort: ${result2.contentToString()}")
13+
val bubbleSortService = BubbleSortService()
14+
val bubbleSortOptimizedService = BubbleSortOptimizedService()
15+
SortServiceRunner.runTestCase(bubbleSortService, bubbleSortOptimizedService)
2216
}
2317
}

‎src/main/kotlin/pl/dmichalski/algorithms/_9_sorting/insertion/InsertionSortService.kt‎

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,17 @@ import pl.dmichalski.algorithms._9_sorting.SortService
1111
internal class InsertionSortService : SortService {
1212

1313
override fun sort(values: IntArray): IntArray {
14-
for (i in 1 until values.size) {
15-
val currentVal = values[i]
14+
val valuesCopy = values.copyOf()
15+
for (i in 1 until valuesCopy.size) {
16+
val currentVal = valuesCopy[i]
1617
var j: Int = i - 1
17-
while (j >= 0 && values[j] > currentVal) {
18-
values[j + 1] = values[j]
18+
while (j >= 0 && valuesCopy[j] > currentVal) {
19+
valuesCopy[j + 1] = valuesCopy[j]
1920
j--
2021
}
21-
values[j + 1] = currentVal
22+
valuesCopy[j + 1] = currentVal
2223
}
23-
return values
24+
return valuesCopy
2425
}
2526

2627
}
Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package pl.dmichalski.algorithms._9_sorting.insertion
22

3+
import pl.dmichalski.algorithms._9_sorting.SortServiceRunner
4+
35
/**
46
* Write a function called sort, that accepts integer array
57
* and returns sorted array using insertion sort algorithm.
@@ -8,14 +10,8 @@ object Runner {
810

911
@JvmStatic
1012
fun main(args: Array<String>) {
11-
val values = intArrayOf(3, 2, 5, 1, 4)
12-
1313
val sortService = InsertionSortService()
14-
15-
val result = sortService.sort(values)
16-
17-
println("Before sorting: ${values.contentToString()}")
18-
println("After sorting with insertion sort: ${result.contentToString()}")
14+
SortServiceRunner.runTestCase(sortService)
1915
}
2016

2117
}

‎src/main/kotlin/pl/dmichalski/algorithms/_9_sorting/merge/MergeSortService.kt‎

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,13 @@ import pl.dmichalski.algorithms._9_sorting.SortService
1111
internal class MergeSortService : SortService {
1212

1313
override fun sort(values: IntArray): IntArray {
14-
if (values.size <= 1) {
15-
return values
14+
val valuesCopy = values.copyOf()
15+
if (valuesCopy.size <= 1) {
16+
return valuesCopy
1617
}
17-
val midPoint = values.size / 2
18-
val left = sort(values.copyOfRange(0, midPoint))
19-
val right = sort(values.copyOfRange(midPoint, values.size))
18+
val midPoint = valuesCopy.size / 2
19+
val left = sort(valuesCopy.copyOfRange(0, midPoint))
20+
val right = sort(valuesCopy.copyOfRange(midPoint, valuesCopy.size))
2021
return merge(left, right)
2122
}
2223

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package pl.dmichalski.algorithms._9_sorting.merge
22

3+
import pl.dmichalski.algorithms._9_sorting.SortServiceRunner
4+
35
/**
46
* Write a function called sort, that accepts integer array
57
* and returns sorted array using bubble sort algorithm.
@@ -8,14 +10,8 @@ object Runner {
810

911
@JvmStatic
1012
fun main(args: Array<String>) {
11-
val values = intArrayOf(3, 2, 5, 1, 4, 2, 22, -2)
12-
1313
val sortService = MergeSortService()
14-
15-
val result = sortService.sort(values)
16-
17-
println("Before sorting: ${values.contentToString()}")
18-
println("After sorting with merge sort: ${result.contentToString()}")
14+
SortServiceRunner.runTestCase(sortService)
1915
}
2016

2117
}

‎src/main/kotlin/pl/dmichalski/algorithms/_9_sorting/quick/QuickSortService.kt‎

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,37 +11,38 @@ import pl.dmichalski.algorithms._9_sorting.SortService
1111
internal class QuickSortService : SortService {
1212

1313
override fun sort(values: IntArray): IntArray {
14-
sortArray(values)
15-
return values
14+
val valuesCopy = values.copyOf()
15+
sortArray(valuesCopy)
16+
return valuesCopy
1617
}
1718

18-
private fun sortArray(values: IntArray, left: Int? = 0, right: Int? = values.size): IntArray {
19+
private fun sortArray(valuesCopy: IntArray, left: Int? = 0, right: Int? = valuesCopy.size): IntArray {
1920
if (left!! < right!!) {
20-
val pivotIndex = pivot(values, left, right)
21-
sortArray(values, left, pivotIndex)
22-
sortArray(values, pivotIndex + 1, right)
21+
val pivotIndex = pivot(valuesCopy, left, right)
22+
sortArray(valuesCopy, left, pivotIndex)
23+
sortArray(valuesCopy, pivotIndex + 1, right)
2324
}
24-
return values
25+
return valuesCopy
2526
}
2627

27-
private fun pivot(values: IntArray, start: Int, end: Int): Int {
28-
val pivot = values[start]
28+
private fun pivot(valuesCopy: IntArray, start: Int, end: Int): Int {
29+
val pivot = valuesCopy[start]
2930
var swapIndex = start
3031

3132
for (i in start + 1 until end) {
32-
if (pivot > values[i]) {
33+
if (pivot > valuesCopy[i]) {
3334
swapIndex++
34-
swap(values, swapIndex, i)
35+
swap(valuesCopy, swapIndex, i)
3536
}
3637
}
37-
swap(values, start, swapIndex)
38+
swap(valuesCopy, start, swapIndex)
3839
return swapIndex
3940
}
4041

41-
private fun swap(values: IntArray, x: Int, y: Int) {
42-
val temp = values[x]
43-
values[x] = values[y]
44-
values[y] = temp
42+
private fun swap(valuesCopy: IntArray, x: Int, y: Int) {
43+
val temp = valuesCopy[x]
44+
valuesCopy[x] = valuesCopy[y]
45+
valuesCopy[y] = temp
4546
}
4647

4748
}
Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package pl.dmichalski.algorithms._9_sorting.quick
22

3+
import pl.dmichalski.algorithms._9_sorting.SortServiceRunner
4+
35
/**
46
* Write a function called sort, that accepts integer array
57
* and returns sorted array using quick sort algorithm.
@@ -8,14 +10,8 @@ object Runner {
810

911
@JvmStatic
1012
fun main(args: Array<String>) {
11-
val values = intArrayOf(3, 2, 5, 1, 4, 2, 22, -2)
12-
1313
val sortService = QuickSortService()
14-
15-
val result = sortService.sort(values)
16-
17-
println("Before sorting: ${values.contentToString()}")
18-
println("After sorting with quick sort: ${result.contentToString()}")
14+
SortServiceRunner.runTestCase(sortService)
1915
}
2016

2117
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /