队列快速排序不排序和打印随机字符串[C ++]

时间:2017-04-29 19:05:55

标签: c++ sorting queue quicksort

此代码应该从用户获取5个整数并将它们放入列表中并对它们进行排序。我试图证明你可以使用快速排序对队列进行排序,但它打印出随机字符串/变量名称与emp1temp1,9urrentID等字母混合。我不太熟悉如何使用队列,但我知道push会添加到队列的前面,pop会删除队列前面的项目,而front和back会查看第一个和最后一个值。< / p>

struct PatientDetails {
    int ID;
};
queue<PatientDetails> unorderedQueue;
void quickSortIDQueue(queue<PatientDetails> patient);
void addPatient();

int main()
{
    for (int i = 0; i < 5; i++) {
        addPatient();
    }

    queue<PatientDetails> Queue;

    for (int i = 0; i < unorderedQueue.size(); i++) {
        unorderedQueue.push(unorderedQueue.front());
        Queue.push(unorderedQueue.front());
        unorderedQueue.pop();
    }

    for (int i = 0; i < unorderedQueue.size(); i++) {
        PatientDetails id = Queue.front();
        cout << id.ID + " ";
        Queue.pop();
    }
    cout << endl;
    quickSortIDQueue(unorderedQueue);
    for (int i = 0; i < unorderedQueue.size(); i++) {
        PatientDetails id = unorderedQueue.front();
        cout << id.ID + " ";
        unorderedQueue.pop();
    }
    cout << endl;
    string text;
    cin >> text;
    return 0;
}

void quickSortIDQueue(queue<PatientDetails> patient) {
    queue<PatientDetails> temp1;
    queue<PatientDetails> temp2;
    queue<PatientDetails> temp3;
    PatientDetails pivot = patient.back();

    PatientDetails CurrentID;

    while (patient.size() > 0) {
        CurrentID = patient.front();
        patient.pop();
        if (CurrentID.ID < pivot.ID) {
            temp1.push(CurrentID);
        }
        else if (CurrentID.ID == pivot.ID) {
            temp2.push(CurrentID);
        }
        else {
            temp3.push(CurrentID);
        }

        if (temp1.size() > 1){
            quickSortIDQueue(temp1);
        }
        if (temp3.size() > 1){
            quickSortIDQueue(temp3);
        }

    }
    while (temp1.size() > 0) {
        patient.push(temp1.front());
        temp1.pop();
    }

    while (temp2.size() > 0) {
        patient.push(temp2.front());
        temp2.pop();
    }

    while (temp3.size() > 0)
    {
        patient.push(temp3.front());
        temp3.pop();
    }
}

void addPatient(){
    string text = "";
    PatientDetails pd;
    cin >> text;
    pd.ID = stoi(text);
    unorderedQueue.push(pd);
}

1 个答案:

答案 0 :(得分:0)

您看到的主要问题是输出上的随机垃圾。使用调试器逐步执行代码,您甚至可以在排序之前看到这种情况,因为您在调用sort方法之前(尝试)输出值。

该问题是由行cout << id.ID + " ";引起的 你想要的是cout << id.ID << " ";

使用调试器可能不是最简单的事情;希望你能更好地修复排序本身。