У вас есть несколько вопросов здесь.
Во-первых, вы неправильно скопировали код (например, строка 5 псевдокода - включая строку комментария).То, что вы должны искать, это индекс максимального значения, вместо этого вы сравниваете значение с индексом.Что еще хуже, вы делаете это таким образом, что в итоге сохраняется только окончательное сравнение, потому что вы перезаписываете все остальные результаты.
Во-вторых, псевдокод запускает индексы с 1-n, как вы знаете, C ++ не делает, вместо этого мы используем индексирование на основе 0.Что касается ошибки, std::bad_alloc
указывает на то, что выделение не удалось, это, скорее всего, строка: auto temp = mat[h];
, где h
выходит за пределы из-за вашего подхода подсчета на основе 1.
Возможно, в качестве примечания, вы также можете заменить свой своп std::swap
, это может немного улучшить производительность, так как оно, вероятно, позволит избежать копирования и полагаться на перемещение вместо этого.