내 quickSort가 작동하지 않습니다. 필자는 특히 분할 알고리즘을 통과해야하는 대상과 머리글 노드가되는 경우와 마지막 노드 인 경우와 같이 피벗을 관리하는 방법을 잘 모릅니다. 나는 배열에 대한 해결책에 대한 나의 접근 방식을 기반으로했다. 여기 내 시도가있다. 어떤 아이디어? 파티셔닝 알고리즘은 단일 링크 목록 (SLL)의 한 방향 특성에 맞게 선택되었습니다.단일 링크 목록의 quicksort
public static SLL quickSort(SLL list, SLLNode first, SLLNode last)
{
if (first != null && last != null)
{
SLLNode p = partition(list, first, last) ;
quickSort(list,first,p) ;
quickSort(list,p.succ, last) ;
}
return list ;
}
public static SLLNode partition(SLL list, SLLNode first, SLLNode last)
{
//last.succ = null ;
SLLNode p = first ;
SLLNode 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 ;
}
[편집]
나는 '자리에서'내가 특별히 머리를 관리하는 방법에 대한 도움말을 찾고
을이 작업을 수행 할 수 및이 과정에서 마지막 . 나의 접근 방식은
디버거에서 코드를 단계별로 실행하면 어떻게됩니까? 네가 가질 수있는 가장 간단한 예제는 무엇일까? 문제를 보여주는 단위 테스트를 제공 할 수 있습니까? –
단일 링크 된 목록에서 현재 위치 정렬을 원하십니까? 이것은 매우 느리게 나타납니다. 시간과 알고리즘에 따라 약간의 메모리를 교환 할 수 있다면, 파티션이 실제로 두 개의 새로운 하위 목록을 만들고, 재귀 적으로 정렬하고 결과를 연결하도록하십시오. – Ingo
"last.succ = null"은 연결된 목록을 손상시킬 것이라고 생각합니다. – RollingBoy