У меня есть некоторые проблемы с сортировкой элементов на 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]
?
Большое спасибо.
Это должно работать, чтобы сделать std::sort(a, a + n);
— конечно, разрешено ли это, когда вам не разрешено использовать стандартные контейнеры, это, конечно, другой вопрос.
Других решений пока нет …