java - 双向链表上的快速排序(输出不正确)

标签 java sorting data-structures linked-list quicksort

这个问题我已经做了一段时间了。 我创建了一个名为 quickSort.java 的文件——选择列表的最后一个元素作为枢轴元素。并尝试对数字进行排序,但不知何故我无法生成预期的输出。我尝试了很多可能的选择,但我被卡住了!请帮助获得正确的解决方案。

这是我的文件代码:quickSort.java

public void quickFun(Node node)
{
    Node new_node = node;

    /* To find the last element as pivot*/


   while(new_node.next!=null)
    {
        new_node = new_node.next;
    }

    Node head = node;
    Node tail = new_node;
    quickSort(head, tail);
}

public void quickSort(Node head, Node tail)
{       
    Node q = partition(head,tail);

    if(head!=q && head!=q.prev)
    {
       quickSort(head, q.prev);

    }
    if(tail!=q && tail!=q.next)
    {
       quickSort(q.next, tail);
    }

}

public Node partition(Node low, Node high){
    int p = high.data;

    Node i = low.prev;

    for(Node j = low; j!=high; j=j.next)
    {
        if(j.data <= p)
        {              
            if(i==null)
            {
                i = low;
            }
            else
            {
                i = i.next;
            }
            swap(i.data, j.data);
        } 
    }

    if(i==null)
    {
        i = low;
    }
    else
    {
          i = i.next;
    }
    swap(i.data, high.data);
    return i;
}

public void swap(int a , int b)
{
    int t;

    t = a;
    a = b;
    b = t;
}

这里 quickFun 接收插入的 LinkedList 的头部作为参数。 我基本上停留在 quickSort(Node, Node) 条件。

请帮我解决这个问题。

最佳答案

你不能像这样交换值:

public void swap(int a , int b)
{
    int t;

    t = a;
    a = b;
    b = t;
}

Java 是 pass-by-value , 所以 ab 是要交换的局部变量;当 swap 返回时,您对值所做的任何更改都将丢失。

但是,您可以这样写:

public void swap(Node a , Node b)
{
    int t;

    t = a.data;
    a.data = b.data;
    b.data = t;
}

因为这是更新两个节点实例上的字段,它们仍然按值传递,但值是对实例的引用。

关于java - 双向链表上的快速排序(输出不正确),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33919384/

相关文章:

excel - 在 Excel VBA 中对向量进行排序

r - 如何处理 R 中的多种缺失?

string - 可以使一组字符串唯一的最少字符数

java - WebGoat 服务器拒绝来自远程 IP 的连接

c - 我在 C 语言中遇到用于合并排序的动态分配数组的段错误(核心转储)错误?

javascript - 将一个数组按另一个数组排序并附加未知的缺失项

java - 在java中实现自上而下的解析器

java - 将接口(interface)重定向到对象

java - Java 正则表达式中 matches() 和 find() 之间的区别

java - 用于 MultivaluedMap Jersey 的 Swagger API?是否可以?