Вы передаете параметр l
по значению, а не по ссылке. Вот почему манипуляции, которые вы выполняете в функции selectionSort
, не изменяют список. Вот версия, которая работает:
#include <iostream>
#include <list>
void selectionSort(std::list<short>& l) {
std::list<short>::iterator it1;
std::list<short>::iterator it2;
std::list<short>::iterator it3;
short min, temp;
for(it1 = l.begin(); it1 != l.end(); it1++) {
temp = min = *it1;
it3 = l.end();
for(it2 = it1; it2 != l.end(); it2++) {
if(*it2 < min) {
min = *it2;
it3 = it2;
}
}
if (it3 != l.end()) {
*it1 = min;
*it3 = temp;
}
}
}
int main()
{
std::list<short> mylist= {10,1,8,13,14,7,6,5,18,9,19,12,17,15,4,2};
selectionSort(mylist);
std::list<short>::iterator it;
std::cout << "elements in list\n";
for (it = mylist.begin(); it != mylist.end(); it++) {
std::cout << *it << std::endl;
}
return 0;
}
Короче говоря, вам нужно добавить &
после типа l
в объявлении вашей функции selectionSort
.
Обновление
Я удалил параметр size
из кода, потому что вы им не пользуетесь, и в действительности он все равно не нужен.