Кажется, проблема в том, что вы получаете изменения в плане вставок, удалений и модификаций.
Если вы сначала выполните вставку, а затем удаление (это то, что вы делаете прямо сейчас),Он будет вставлять новые значения, и источник данных будет изменен, поэтому теперь, когда вы удаляете строки, это не будет правильно.
Также в вашем случае, когда вы сортируете массив, обычно заменяются два элемента,один удаляется, а другой будет добавлен.
Итак, что может решить вашу проблему, сначала удалите, а затем вставьте.Как это:
UIView.performWithoutAnimation {
tableView.beginUpdates()
tableView.deleteRows(at: deletions.map({ IndexPath(row: $0, section: 0)}), with: .automatic)
tableView.insertRows(at: insertions.map({ IndexPath(row: $0, section: 0) }), with: .automatic)
tableView.reloadRows(at: modifications.map({ IndexPath(row: $0, section: 0) }), with: .automatic)
tableView.endUpdates()
}