在我的任务中,我必须创建具有数据成员的类city
width(GeografskaShirina)
lenght(GeografskaDaljina)
ime(name)
NadmorskaVisochina(height)
我有defalut的构造函数,它输入数据,复制构造函数和operator =的预定义。
我应该通过GeografskaDaljina(长度)对我的动态阵列保加利亚进行排序,使用快速排序,我在类quicksort的方法中实现了。我还有一个Output()方法(打印城市的排序名称),方法getDaljina(),它返回GeografskaDaljina(长度)。
问题在于,当我在main()中调用quicksort时,排序不能正常工作,并且不会打印出希望的结果。
#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;}
答案 0 :(得分:0)
您在city :: quicksort中的第二个while循环中使用了错误的索引。您可以使用j将正确的值与数据透视值进行比较:
while (bulgaria[j].getDaljina()>pivot)
j--;