我有一个动态分配的对象数组。一些数组由对象填充,但其他部分为空。当我使用冒泡排序对数组中的对象进行排序时,它会正确排序,但是null的数组部分位于填充的数组部分的前面。有没有办法将空对象推送到数组的后面而不是前面?
数组中发生的事情的图片:
| null | null | null | object | object |
我希望数组看起来像什么的图片:
| object| object | null | null | null |
这是我的冒泡排序代码:
::bubbleSort()
{
bool flag = true;
obj temp;
int j = 0;
while(flag)
{
flag = false;
j++;
for(int i = 0; i < (max - j); i++)
{
if(arr[i] > arr[i + 1])
{
temp = arr[i];
arr[i]= arr[i+1];
arr[i+1] = temp;
flag = true;
}
}
}
}
这是我如何定义我的arr:
private:
obj *arr;
然后在我的构造函数
中max = 25
arr = new obj[max];
答案 0 :(得分:1)
您可以将std::sort
与自定义比较器一起使用:
std::sort(std::begin(arr), std::end(arr), [](auto *p1, auto *p2) {
if (p1 == nullptr) {
return false;
}
if (p2 == nullptr) {
return true;
}
return *p1 < *p2;
});
这假定您的自定义类型定义operator<
。当然,您可以使用您喜欢的任何其他内容来比较它们。
如果你必须实现自己的排序算法,你仍然可以将比较器函数的主体内联到排序代码的中间。
答案 1 :(得分:1)
您正在寻找的功能可能是std::partition,如果您想要的是后面的空值。如果您还需要对其他值进行排序,std::sort是正确的选择。两者都允许您定义一个定义排序或分区顺序的比较,允许您自定义元素的排序方式。