Java递归快速排序问题与持久变量



我正在尝试使用递归快速排序对项目列表进行排序,在测试时我注意到重复使用该方法会使列表的大小加倍,这不是我想要的。

/*list is filled with four Items:
item test = new item(234, 44.2, "wardrobe", "Example Wardrobe");
item test1 = new item(432, 87.2, "Chair", "Example Table");
item test2 = new item(007, 600.666, "Table", "Example Table");
item test3 = new item(02,5.4,"Jar","Example Jar");*/
dlinkedList dList=Operations.fillList(); 
dlinkedList list = dlinkedList.quicksortPrice(dList);
dlinkedList.printAllElements(list);
System.out.println(" sorted once ");
list = dlinkedList.quicksortPrice(dList);
dlinkedList.printAllElements(list);
System.out.println(" sorted twice ");

预期输出:

|名称:罐子|价格:5.4|类别:样本罐子
|名称:椅子|类别:样本衣柜
|价格:87.2|类别:样本表格
|名称:表格|价格:600.666|类别:样本表格
一次排序

|名称:罐子|价格:5.4|类别:样本罐子
|名称:椅子|类别:样本衣柜
|价格:87.2|类别:样本表格
|名称:表格|价格:600.666|类别:样本表格
两次排序

实际输出:

|名称:罐子|价格:5.4|类别:样本罐子
|名称:椅子|类别:样本衣柜
|价格:87.2|类别:样本表格
|名称:表格|价格:600.666|类别:样本表格
一次排序

|名称:罐子|价格:5.4|类别:样本罐子
|名称:箱子|价格:44.2|类别:样本箱子
|名称:箱子|价格:87.2|类别:样本表格
|名称:箱子|价格:44.2|类别:样本表格
|名称:箱子|价格:87.2|类别:样本表格
|名称:箱子|价格:87.2|类别:样本表格
|名称:箱子|价格:600.666|类别:样本表格
|名称:箱子|价格:600.666|类别:样本表格


static dlinkedList sortedList = new dlinkedList();
public static dlinkedList quicksortPrice(dlinkedList list) {
dlinkedList smaller = new dlinkedList();
dlinkedList greater = new dlinkedList();
Node y = list.head;
pivot = list.tail;
if (pivot == null) {
return sortedList;
} else {
if (numberOfElements(sortedList) == 0){
sortedList.addAtEndOfList(pivot.data);
}
while (y.next != null) {
if (y.data.price < pivot.data.price) {
smaller.addAtEndOfList(y.data);
y = y.next;
} else if (y.data.price > pivot.data.price) {
greater.addAtEndOfList(y.data);
y = y.next;
} else {
sortedList.insertAfterNode(sortedList.tail, y.data, sortedList);
y = y.next;
}
}
if(numberOfElements(greater) == 0){
}else{
sortedList.insertAfterNode(sortedList.searchByPrice(pivot.data.price),   greater.tail.data,sortedList);
}
if (numberOfElements(smaller) == 0) {
}else{
sortedList.insertBeforeNode(sortedList.searchByPrice(pivot.data.price),smaller.tail.data,sortedList  );
}
if(numberOfElements(smaller) == 0 && numberOfElements(greater) == 0){
return sortedList;
}else{
quicksortPrice(smaller);
quicksortPrice(greater);}
}
return sortedList;
}

我已经把我的问题缩小到我用来在递归迭代之间存储排序项的静态列表,但遗憾的是,我不知道如何解决这个问题。我试图清除每一种排序之间的列表,但由于某种原因,清空了整个列表…如有任何帮助,不胜感激。

好了,我已经解决了这个问题,双链列表sortedList是静态的,并在每次迭代中保留所有结果,这导致列表变得更大。通过将所有节点指定为空来清除列表的解决方案不起作用,因为这也清除了指针的原点,因此原始列表也成为空列表。

在每次排序之后,我将一个空列表分配给变量sortedList,这可能不是最优雅的解决方案,因为我现在在我的代码中有一个空列表仅用于此目的,但它有效…

dlinkedList empty = new dlinkedList();
dlinkedList sortedList = sortMenuSwitch(mainMenuInput());
dlinkedList.sortedList = empty;

最新更新