Это может быть плохой вопрос, но мне любопытно.
Я следил за онлайн-курсами по некоторым структурам данных и алгоритмам, и я наткнулся на такие алгоритмы, как выборка, вставка, пузырьковая сортировка, сортировка слиянием,быстрая сортировка, сортировка в куче. Они почти никогда не приближаются к O (n), когда массив сортируется в обратном порядке.
Мне было интересно одно: почему мы не используем пространство вместо времени?
Когда я что-то организовываю, я беру это и кладу туда, где оно принадлежит. Поэтому я подумал, что если у нас есть массив элементов, мы могли бы просто поместить каждое значение в индекс с этим значением.
Вот моя реализация в Swift 4:
let simpleArray = [5,8,3,2,1,9,4,7,0]
let maxSpace = 20
func spaceSort(array: [Int]) -> [Int] {
guard array.count > 1 else {
return array
}
var realResult = [Int]()
var result = Array<Int>(repeating: -1, count: maxSpace)
for i in 0..<array.count{
if(result[array[i]] != array[i]){
result[array[i]] = array[i]
}
}
for i in 0..<result.count{
if(result[i] != -1){
realResult.append(i)
}
}
return realResult
}
var spaceSorted = [Int]()
var execTime = BenchTimer.measureBlock {
spaceSorted = spaceSort(array: simpleArray)
}
print("Average execution time for simple array: \(execTime)")
print(spaceSorted)
Результаты, которые я получаю:
Этот алгоритм сортировки уже существует?
Это плохая идея, потому что он принимает только уникальные значения и теряет дубликаты? Или может быть использование для этого?
И почему я не могу использовать Int.max для maxSpace?
Редактировать: я получаю ошибку ниже
ошибка: выполнение было прервано.
при использовании let maxSpace = Int.max
MyPlayground (6961,0x7000024af000) malloc: обнаружено повреждение кучи, свободный список поврежден при0x600003b7ebc0 * Неверное значение защиты: 0 MyPlayground (6961,0x7000024af000) malloc: * установить точку останова в malloc_error_break для отладки
Спасибо за ответы