我正在实现一个快速排序函数来对单向链表进行排序。我需要使用什么算法来完成这个功能?对于链表,每次比较的最坏情况下时间复杂度为O(N),而不是数组通常的O(1)。因此,最坏情况下该算法的复杂度是多少?
总之,我需要对快速排序算法进行哪些修改才能获得最优的排序算法,该算法的最坏情况下的复杂度是多少?
感谢!
下面是我的实现:
总之,我需要对快速排序算法进行哪些修改才能获得最优的排序算法,该算法的最坏情况下的复杂度是多少?
感谢!
下面是我的实现:
public static SingleLinkedList quickSort(SingleLinkedList list, SLNode first, SLNode last)
{
if (first != null && last != null)
{
SLNode p = partition(list, first, last) ;
quickSort(list,first,p) ;
quickSort(list,p.succ, last) ;
}
return list ;
}
public static SLLNode partition(SinlgleLinkedList list, SLNode first, SLNode last)
{
SLNode p = first ;
SLNode ptr = p.succ ;
while (ptr!=null)
{
if (ptr.data.compareToIgnoreCase(p.data)<0)
{
String pivot = p.data ;
p.data = ptr.data ;
ptr.data = p.succ.data ;
p.succ.data = pivot ;
p = p.succ ;
}
ptr = ptr.succ ;
}
return p ;
}
qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)
算法,尽管有些人认为它不是“真正”的快速排序,因为分区不是原地进行的。 - jfs