使用链表实现稳定的就地快速排序

时间:2013-12-06 18:15:25

标签: java linked-list quicksort

我正在尝试快速排序,对于通常的非稳定版本,我有以下代码:

private static Integer partition(ArrayList<Integer> a , Integer p , Integer r )
{
    Integer x = a.get(p) ;
    Integer i = p ;
    Integer j = r ;
    while ( j > i )
    {
        while ( a.get(i) <= x && i < j )
            i++ ;
        while ( a.get(j) > x && i < j )
            j-- ;
        if ( i < j )
            Collections.swap(a,i,j) ;
    }
    return j ;
}
private static void quickSort ( ArrayList<Integer> a , Integer p , Integer r )
{
    if ( p < r )
    {
        Integer q = partition(a,p,r) ;
        quickSort(a,p,q-1) ;
        quickSort(a,q+1,r) ;
    }
}

但我需要一个稳定的版本!

我的导师告诉我,使用链表并使用每个列表的第一个元素作为支点,可以实现这种(就地和稳定的快速排序)。所以我一直在寻找能引导我这个的算法?!感谢

0 个答案:

没有答案