我有一个名为taskSubList的列表,它由对象组成。我需要根据iscompleted函数对任务进行排序。但是列表没有排序。我的代码是:
if(taskSubList.size()!=0)
{
for(int position=0;position<taskSubList.size();position++)
{
if(taskSubList.get(position).isCompleted()==1)
{
Task taskItem = taskSubList.get(position);
for (int i = position + 1; i < taskSubList.size();i++) {
Task taskItem1 = taskSubList.get(i);
taskSubList.set(i-1, taskItem1);
}
taskSubList.set(taskSubList.size()-1, taskItem);
}
}
}
答案 0 :(得分:4)
如果您尝试自己实施排序,这是一个很好的练习,但为什么不使用Collections.sort()
?
答案 1 :(得分:0)
我会告诉你我在你的算法中发现的缺陷..,让我们假设你的前两个元素已经完成,你正在向右移动..在第一个循环后第二个元素到达第一个位置,你不是再次检查..所以它将保持未分类..
尝试使用以下算法...
if(taskSubList.size()!=0)
{
int completedCount = taskSubList.size() - 1;
for(int position=0;position<taskSubList.size();position++)
{
if (position >= completedCount - 1)
break;
if(taskSubList.get(position).isCompleted()==1) {
// swap elements in position and completedCount
completedCount--;
position --;
}
}
}
答案 2 :(得分:0)
排序算法中存在错误。当您将completed
元素移动到列表末尾时,当前元素(索引为position
)将替换为下一个元素(来自position+1
)。但是在第一次迭代中position
递增,所以你没有处理新元素(来自position+1
)。
例如,列表:
(1完成)(2完成)(3不完整)
在第一次迭代之后,您将拥有:
(2完成)(3不完整)(1完成)
但是下一次迭代将从元素(3 incomplete)
开始,而元素(2 completed)
将会被遗漏。
答案 3 :(得分:0)
现在这段代码可以工作!!。
if(taskSubList.size()!=0)
{
for(int position=0;position<taskSubList.size();position++)
{
if(taskSubList.get(position).isCompleted()==1)
{
for(int i=position+1;i<taskSubList.size();i++)
{
if(taskSubList.get(i).isCompleted()==0)
{
Task taskItem = taskSubList.get(position);
Task taskItem1 = taskSubList.get(i);
taskSubList.set(i, taskItem);
taskSubList.set(position, taskItem1);
}
}
}
}
}