Здравствуйте.
В книге про алгоритмы (грокаем алгоритмы) есть пример создания функции сортировки массива (selection sort). В книге в теле функции сортировки используются две переменные и два массива (Один входящий не отсортированный и один выходящий отсортированный).
Я сделал функцию немного по-своему и отказался от создания нового массива, т.е. решил все операции замены производить просто с помощью переменных.
Мой код с одним массивом:
package main
import (
"fmt"
"time"
)
func pleaseSortMeNumbers(n []int) []int {
counter := 0
fmt.Println("Sorting algorithm started...")
for i := range n {
lowestNumber := n[i]
lowestNumberId := i
for j := i; j <= len(n)-1; j++ {
if lowestNumber > n[j] {
lowestNumber = n[j]
lowestNumberId = j
}
counter++
}
n[lowestNumberId] = n[i]
n[i] = lowestNumber
}
time.Sleep(time.Second / 2)
fmt.Println("Sorting done!")
time.Sleep(time.Second / 2)
fmt.Println(counter, " comparisons.")
time.Sleep(time.Second / 2)
fmt.Println("Slice: ", n)
return n
}
Пример кода из книги с двумя массивами:
По идее, в моей реализации алгоритма в памяти занимается место под две переменные и под один массив, а в алгоритме из книги место в памяти занимается под две переменные и два массива. Мои рассуждения верны или нет? Мой алгоритм лучше или хуже?