Luk*_*101 5 java bubble-sort singly-linked-list
我的代码有问题,我已经创建了一个单独链接列表类,您可以在其中添加,删除,修改,合并等...但是,我正在尝试一个简单的冒泡排序,并遇到了列表是的问题没有正确排序.这里有一些注意事项:
public static void sortList()
{
if (isEmpty() == true)
{
System.out.println("Cannot sort - the list is empty");
}
else if (getHead().getNext() == null)
{
System.out.println("List sorted");
}
else
{
Node current = getHead().getNext();
CustomerFile tempDat;
boolean swapDone = true;
while (swapDone)
{
current = getHead().getNext();
swapDone = false;
while (current != null)
{
if (current.getNext() != null &&
current.getData().getSurname().compareTo(
current.getNext().getData().getSurname()) >0)
{
tempDat = current.getData();
current.setData(current.getNext().getData());
current.getNext().setData(tempDat);
swapDone = true;
}
current = current.getNext();
}
}
if (getHead().getData().getSurname().compareTo(
getHead().getNext().getData().getSurname()) >0)
{
current = getHead().getNext();
getHead().setNext(current.getNext());
setHead(current);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我很感激反馈
您的代码是一个奇怪的混合物,主要是交换数据,但特别对待头部,试图通过切换链接将其与下一个交换。
正如另一个答案中所指出的,最后一个交换没有正确实现,但如果您通过交换数据来执行操作,实际上没有理由特殊对待头部。
您所要做的就是在外循环的头部开始每次遍历列表。
这产生了一个可行的解决方案:
public void sortList()
{
if (isEmpty())
{
System.out.println("An empty list is already sorted");
}
else if (getHead().getNext() == null)
{
System.out.println("A one-element list is already sorted");
}
else
{
Node current = getHead();
boolean swapDone = true;
while (swapDone)
{
swapDone = false;
while (current != null)
{
if (current.getNext() != null && current.getData().getSurname().compareTo(current.getNext().getData().getSurname()) >0)
{
CustomerFile tempDat = current.getData();
current.setData(current.getNext().getData());
current.getNext().setData(tempDat);
swapDone = true;
}
current = current.getNext();
}
current = getHead();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已将其设为非静态,因为正如评论中所述,我不清楚您的静态如何工作。您也许可以在您的上下文中将其设为静态。
我还改变了其他一些小事情。从来没有必要通过像这样的代码来检查条件
if (isEmpty() == true)
Run Code Online (Sandbox Code Playgroud)
在 Java 中,这完全等同于
if (isEmpty())
Run Code Online (Sandbox Code Playgroud)
并且tempDat不需要在使用它的地方之外声明。
| 归档时间: |
|
| 查看次数: |
7569 次 |
| 最近记录: |