Четыре популярных алгоритма на Swift с объяснением где их обычно применяют:
1. Линейный поиск. Самый простой способ найти элемент в массиве. Используют когда массив маленький и не отсортирован, например для поиска в коротком списке
func linearSearch(_ array: [T], target: T) -> Int? {
for (index, element) in array.enumerated() {
if element == target {
return index
}
}
return nil
}
// Пример
let numbers = [5, 3, 8, 1, 9, 2]
if let index = linearSearch(numbers, target: 8) {
print("Элемент найден на позиции \(index)") // 2
}
2. Бинарный поиск. Гораздо быстрее линейного, но работает только с отсортированными массивами. Используют в больших отсортированных списках, таких как поиск пользователей, товаров, автодополнение и всё такое
func binarySearch(_ array: [T], target: T) -> Int? {
var left = 0
var right = array.count - 1
while left 1 else { return array }
let pivot = array[array.count / 2]
let less = array.filter { $0 < pivot }
let equal = array.filter { $0 == pivot }
let greater = array.filter { $0 > pivot }
return quickSort(less) + equal + quickSort(greater)
}
// Пример
let array = [10, 80, 30, 90, 40, 50, 70]
let sorted = quickSort(array)
print(sorted)
В реальных приложениях чаще используют готовые методы .sorted(), .firstIndex(of:) и структуры данных из стандартной библиотеки (Array, Set, Dictionary). Также в функциях используется и . Это дженерики в Swift где универсальный тип-заполнитель, благодаря которому функция работает с любыми данными: Int, String, вашими моделями. Буква T это стандартное обозначение от слова "Type"
🥰 @SnowBallCode
😍
1. Линейный поиск. Самый простой способ найти элемент в массиве. Используют когда массив маленький и не отсортирован, например для поиска в коротком списке
func linearSearch(_ array: [T], target: T) -> Int? {
for (index, element) in array.enumerated() {
if element == target {
return index
}
}
return nil
}
// Пример
let numbers = [5, 3, 8, 1, 9, 2]
if let index = linearSearch(numbers, target: 8) {
print("Элемент найден на позиции \(index)") // 2
}
2. Бинарный поиск. Гораздо быстрее линейного, но работает только с отсортированными массивами. Используют в больших отсортированных списках, таких как поиск пользователей, товаров, автодополнение и всё такое
func binarySearch(_ array: [T], target: T) -> Int? {
var left = 0
var right = array.count - 1
while left 1 else { return array }
let pivot = array[array.count / 2]
let less = array.filter { $0 < pivot }
let equal = array.filter { $0 == pivot }
let greater = array.filter { $0 > pivot }
return quickSort(less) + equal + quickSort(greater)
}
// Пример
let array = [10, 80, 30, 90, 40, 50, 70]
let sorted = quickSort(array)
print(sorted)
В реальных приложениях чаще используют готовые методы .sorted(), .firstIndex(of:) и структуры данных из стандартной библиотеки (Array, Set, Dictionary). Также в функциях используется и . Это дженерики в Swift где универсальный тип-заполнитель, благодаря которому функция работает с любыми данными: Int, String, вашими моделями. Буква T это стандартное обозначение от слова "Type"
🥰 @SnowBallCode
😍