我有一个c++程序,我想在其中处理排序的InsertSort方法。
我在 main.cpp 文件中请求数据,以便稍后在 Lista.cpp 文件中我可以指示插入它的位置,在这种情况下我有insertaInicio。
case 1:
cout << "Codigo: ";
cin >> codigoDistribuidora;
nuevo.guardaNombre(codigoDistribuidora);
cout << "Nombre: ";
cin.ignore();
getline(cin, nombreDistribuidora);
nuevo.guardaNombre(nombreDistribuidora);
cout << "Domicilio: ";
getline(cin, domicilioDistribuidora);
nuevo.guardaNombre(domicilioDistribuidora);
cout << "Telefono: ";
cin >> telefonoDistribuidora;
nuevo.guardaNombre(telefonoDistribuidora);
cout << "Nombre del gerente: ";
cin.ignore();
getline(cin, nombreGerente);
nuevo.guardaNombre(nombreGerente);
l.insertaInicio(nuevo);
break;
开始插入是这样的:
void Lista::insertaInicio(Distribuidora dato) {
Nodo *tmp = new Nodo;
Nodo *aux = inicio;
tmp->guardaObjeto(dato);
tmp->guardaNodoSig(NULL);
bool nada = vacia();
if (nada) {
inicio = tmp;
}
else {
tmp->sig = aux;
inicio = tmp;
}
string nombreDistribuidora = dato.damenombreDistribuidora();
string codigoDistribuidora = dato.damecodigoDistribuidora();
cout << "Has agregado la Distruibuidora con el nombre: '" << nombreDistribuidora << "' y codigo '" << codigoDistribuidora << "'" << endl;
}
插入它们时如何使用InsertSort并对其进行排序。希望你能理解我,谢谢。
上面的代码应该放在一个单独的函数中。除了大大提高代码的可读性外,还应该记住,如果语句消失或提前潜入,语句
switch
可能会非常危险。break
强烈建议case
尽可能简单。另一方面,由于您没有包含 的完整实现
Lista
,我会告诉您,insertaInicio
您可能对该函数有疑问:如果列表为空并因此
inicio
指向nullptr
怎么办?inicio
由于您正在制作en的副本,aux
因此不值得修改 指向的地址aux
,因为在这种情况下inicio
它不会发现。好吧,说到你的问题,你要做的就是找到你必须在列表中插入新元素的位置。这样列表将始终被排序。您需要确定如何订购列表:
如果我们假设您选择算法的第一个选项并且顺序正在增加,那么要确定新元素的位置,它将如下所示:
inicio
是nullptr
列表是空的,那么它inicio
指向新元素,我们就完成了用代码说它可能是这样的:
一切顺利。
您似乎正在使用单个链表,这使得排序插入过程稍微复杂一些。
在这种类型的列表中,有序插入过程分为:
在上面的示例代码中,我假设:
Nodo
有一个要接收的构造函数dato
和一个要指向的节点。dato
有一个大于运算符>
。请记住,我写的是指南,您必须根据自己的需要调整它并记住我没有测试过伪代码