Сортировка элементов с помощью пользовательских динамических контейнеров

У меня есть некоторые проблемы с сортировкой элементов на C ++. К сожалению, я не могу использовать контейнеры C ++ (запрос профессора), поэтому я создал новый контейнер под названием ‘vettore’, структура которого концептуально похожа на список.
Поэтому я пытался отсортировать целые, содержащиеся в структуре ‘ветеринарного’, но с помощью следующего кода, давая в качестве входных данных 100, 10, 1, я получаю 1, 100, 100. Я действительно не понимаю, почему он не работает.
Это метод класса «vettore», который должен сортировать элементы:

void ordina(){
vettore<T>*aux=this;
vettore<T>*punt_a_min=aux;
bool sentinella=0;
T min=aux->get_my();

while(aux->get_next()!=nullptr){
aux=aux->get_next();

if(aux->get_my()<min){
sentinella=1;
min=aux->get_my();
punt_a_min=aux;
}
}

if(sentinella==1){
punt_a_min->set_obj(this->get_my());
this->set_obj(min);
}

if(this->get_next()!=nullptr)
*(this->get_next()).ordina();
};

А это класс «ветеринар» (для чего нужен):

template<class T> class vettore{
private:
T my_object; //container
vettore <T> * next; //puntatore al prossimo elemento della lista
public:
vettore():next(nullptr){}; //default constructor
vettore(T oggetto, vettore <T> * successivo=nullptr):next(successivo),my_object(oggetto){}; //faccio puntare la lista a quell'elemento

vettore(const vettore <T> &x):next(x.next),my_object(x.my_object){}; //copy constructor

~vettore(){//destructor
if(next!=nullptr){
delete next;
next=nullptr;
}
};

vettore <T> * get_next(){
return next;
};

T get_my(){
return my_object;
};

T& get_obj(){ //ottenere l'oggetto by reference
return my_object;
};

void ordina(){
//vettore<T>*new_this=this;
vettore<T>*aux=this;
vettore<T>*punt_a_min=aux;
bool sentinella=0;
T min=aux->get_my();

while(aux->get_next()!=nullptr){
aux=aux->get_next();

if(aux->get_my()<min){
sentinella=1;
min=aux->get_my();
punt_a_min=aux;
}
}

if(sentinella==1){
punt_a_min->set_obj(this->get_my());
this->set_obj(min);
}

if(this->get_next()!=nullptr)
*(this->get_next()).ordina();
};

void set_next(vettore<T>*e){
next=e;
}

void set_obj(T obj){
my_object=obj;
};
};

И если это не правильно (или просто для любопытства), есть ли функция сортировки для динамических массивов, объявленных как int * a = new int [n]?
Большое спасибо.

0

Решение

Это должно работать, чтобы сделать std::sort(a, a + n); — конечно, разрешено ли это, когда вам не разрешено использовать стандартные контейнеры, это, конечно, другой вопрос.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]