快速排序动态大量对象无法正常工作



在我的任务中,我必须创建具有数据成员的类城市

width(GeografskaShirina)
lenght(GeografskaDaljina)
ime(name)
NadmorskaVisochina(height)

我有 defalut 的构造函数,它输入数据、复制构造函数和运算符 = 的预定义。

我应该使用快速排序按 GeografskaDaljina(长度(对我的动态数组保加利亚进行排序,这是我在类快速排序方法中实现的。我还有一个 Output(( 方法(打印城市的排序名称(,方法 getDaljina((,它返回 GeografskaDaljina(长度(。

问题是当我在main((中调用快速排序时,排序无法正常工作,并且不会打印希望的结果。

#include "stdafx.h"
#include<string>
#include<iostream>
using namespace std;
class city {
private:
    string ime;
    double GeografskaShirina;
    double GeografskaDaljina;
    double NadmorskaVisochina;
public:
    city();
    double getDaljina();
    string getN();
    void Output();
    city(const city& p);
    city& operator = (const city& p);
    void quicksort(city bulgaria[], int left, int right);

};
city::city(const city& p)
{
    ime = p.ime;
    GeografskaDaljina = p.GeografskaDaljina;
    GeografskaShirina = p.GeografskaShirina;
    NadmorskaVisochina = p.NadmorskaVisochina;
}
city& city::operator = (const city& p)
{
    if (this != &p)
    {
ime = p.ime;
    GeografskaDaljina = p.GeografskaDaljina;
    GeografskaShirina = p.GeografskaShirina;
    NadmorskaVisochina = p.NadmorskaVisochina;
    }
    return *this;

}
city::city()
{
    cout << "Vavedete ime grad: ";
    cin >> ime;
    cout << "Vavedete geografskata shirina na grada: ";
    cin >> GeografskaShirina;
    cout << "geografskata daljina na grada: ";
    cin >> GeografskaDaljina;
    cout << "Vavedete nadmorska visochina na grada: ";
    cin >> NadmorskaVisochina;
    cout << "---------------------------------" << endl;
}

void city:: quicksort(city bulgaria[], int left, int right)
{
    int  min;
    min = (left + right) / 2;
    cout << left << endl;
    cout << right << endl;
    int i = left;
    int j = right;
    int pivot = bulgaria[min].getDaljina();
    while (left < j || i < right)
    {
        while (bulgaria[i].getDaljina() < pivot)
            i++;
        while (bulgaria[i].getDaljina()>pivot)
            j--;
        if (i <= j)
        {
            city temp = bulgaria[i];
            bulgaria[i] = bulgaria[j];
            bulgaria[j] = temp;
            i++;
            j--;
        }
        else
        {
            if (left < j)
            {
                quicksort(bulgaria, left, j);
            }
            if (i < right)
            {
                quicksort(bulgaria, i, right);
            }
                return;
            }
        }
    return;
    }
    double city::getDaljina() {
    return GeografskaDaljina;
}
string city::getN() {
    return ime;
}
void city::Output()
{
    cout << "Imeto e " << ime << endl;
    cout << "Geografskata shirina e " << GeografskaShirina << endl;
    cout << "Geografskata duljina e " << GeografskaDaljina << endl;
    cout << "Nadmorskata visochina e " << NadmorskaVisochina << endl;
}
int main()
{
    int n;
    int i=0;
    cout << "Broi gradove : ";
    cin >> n;
    cout << endl;
    city *bulgaria = new city[n];
    bulgaria[i].quicksort(bulgaria, 0,n-1);
    for (int i = 0; i < n; i++)
    {
    bulgaria[i].Output();}
    return 0;}

你在 city::quicksort 的第二个 while 循环中使用了错误的索引。您可以使用 j 将正确的值与枢轴值进行比较:

while (bulgaria[j].getDaljina()>pivot)
        j--;

最新更新