可能重复:
c++ sort with structs
#include <iostream>
using namespace std;
class fish{
private:
int size;
int price;
public:
fish()
{
size=0;
price=0;
}
void set_price(int x)
{
price=x;
}
void set_size(int g)
{
size=g;
}
int get_size()
{
return size;
}
int get_price()
{
return price;
}
void display()
{
cout<<" Fish price is "<<price<<" Fish size is "<<size<<endl;
}
void sort(fish h[5])
{
for (int o=0;o<=5;o++)
{
fish temp;
temp.set_price(0);
if (h[o].get_price()>h[o+1].get_price())
{
temp.get_price()=h[o].get_price();
h[o].get_price()=h[o+1].get_price();
h[o+1].get_price()=temp.get_price();
}
}
}
};
void main()
{
fish a;
fish b[5];
a.set_size(500);
a.set_price(2);
a.display();
for (int i=0;i<=5;i++)
{
b[i].set_size(i*2);
b[i].set_price(i*100);
}
for (i=0;i<=5;i++)
b[i].display();
}
我想知道如何发送数组b
并对其进行排序。此外,我将询问有关析构函数以及将其放入代码的位置。
答案 0 :(得分:0)
要在分拣时交换鱼,你应该写这个
fish tmp = h[o];
h[o] = h[o+1];
h[o+1] = tmp;
您正在根据鱼的价格进行分类,但这是应该整理的整条鱼。
在另一个问题上,此代码中不需要析构函数。你的鱼类不需要做任何“清理”,所以它不需要析构函数。
答案 1 :(得分:0)
如果你想按给定元素对数组进行排序,那么STL容器应该没问题,如果没有,我会使用这种方法
template<class T>
void quickSort(T * elements, unsigned int first, unsigned int last)
{
if(first < last) //make sure params are in bounds
{
T t = elements[first]; //t is PIVOT
unsigned lastLow = first; //create last low item
unsigned i; //used for loop/swapping
for(i = first + 1; i <= last; i++) //run through entire bounds
if(elements[i] < t) //if elements is less than Low
{
<< " adding one onto lastLow...\n";
lastLow++; //move lastLow up one
swap(elements,lastLow, i); //swap lastlow and i
}
swap(elements,first, lastLow); //swap first and lastlow
if(lastLow != first) //if lastlow is not first element
quickSort(elements, first, lastLow - 1);
if(lastLow != last) //if lastlow is not last element
quickSort(elements, lastLow + 1, last);
}
}
这是用于对数组进行排序的常用快速排序函数。只需替换正确的变量来代表您的数据例如。 T *元素变成Fish * stuff,T t = Elements [first]变成double price = stuff [first]等等。