commit 2025-09-28 10:30 edit a bit ZCppMain/ZtCSortObjList.H
This commit is contained in:
@ -5609,6 +5609,12 @@ namespace ZNsMain
|
|||||||
ZtCTypeData<TFunctor>::
|
ZtCTypeData<TFunctor>::
|
||||||
GetObjRef(AO_Functor)(VP_LoopLink->mo_Data);
|
GetObjRef(AO_Functor)(VP_LoopLink->mo_Data);
|
||||||
|
|
||||||
|
/* 위 코드로 인해서, AO_Functor 이 함수일 때 뿐이 아니라,
|
||||||
|
operator() 연산자를 가진 object 포인터일 때도 사용할 수
|
||||||
|
있게 되었다.
|
||||||
|
|
||||||
|
이제는 ZftMCP() 템플릿 함수를 사용해도 된다. -- 2025-09-27 00:38
|
||||||
|
*/
|
||||||
VP_LoopLink = VP_LoopLink->mp_NextLink ;
|
VP_LoopLink = VP_LoopLink->mp_NextLink ;
|
||||||
}/*
|
}/*
|
||||||
__for0(TypeSize, i, ml_Size)*/
|
__for0(TypeSize, i, ml_Size)*/
|
||||||
@ -5618,6 +5624,28 @@ namespace ZNsMain
|
|||||||
template<typename TFunctor, typename TTypeHelp>
|
template<typename TFunctor, typename TTypeHelp>
|
||||||
void IterElement(TFunctor AO_Functor, TTypeHelp AO_TypeHelp)
|
void IterElement(TFunctor AO_Functor, TTypeHelp AO_TypeHelp)
|
||||||
{
|
{
|
||||||
|
/*/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
■ TTypeHelp 가 class 일 경우, 크기가 커서 참조로 넘어가야 한다면,
|
||||||
|
|
||||||
|
IterElement<myFunctor, myClass&>(myFunctor_obj, myClass_Obj);
|
||||||
|
|
||||||
|
의 형태로 호출할 게 아니라, ZtCObjectPtr<> 을 사용하여,
|
||||||
|
|
||||||
|
myClass myClass_Obj; ZtCObjectPtr<myClass> myCObjPtr(myClass_Obj);
|
||||||
|
|
||||||
|
나
|
||||||
|
|
||||||
|
IterElement(myFunctor_obj, ZtCObjectPtr<myClass>(myClass_Obj));
|
||||||
|
|
||||||
|
형태를 사용하면 좋을 것 같다. -- 2014-06-16 23:11:00
|
||||||
|
|
||||||
|
|
||||||
|
이제는 ZtCRef 과 ZCCheckRef 클래스 템플릿을 사용하면 된다. -- 2021-03-11 11:00
|
||||||
|
다시 말하면 ZftMCP() 템플릿 함수를 사용하면 된다. -- 2025-09-27 01:01
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////*/
|
||||||
|
|
||||||
typedef ZNsMain::
|
typedef ZNsMain::
|
||||||
ZtCCheckRef<TTypeHelp> ZCCheckRef;
|
ZtCCheckRef<TTypeHelp> ZCCheckRef;
|
||||||
|
|
||||||
@ -5631,6 +5659,12 @@ namespace ZNsMain
|
|||||||
);
|
);
|
||||||
////////////////////////////////////////////
|
////////////////////////////////////////////
|
||||||
|
|
||||||
|
/* 위 코드로 인해서, AO_Functor 이 함수일 때 뿐이 아니라, operator()
|
||||||
|
연산자를 가진 object 포인터일 때도 사용할 수 있게 되었다. */
|
||||||
|
|
||||||
|
/* ZCCheckRef::PassData() 으로 인해, 인수를 ZtCRef 클래스를 이용해
|
||||||
|
인수를 참조로 넘길 수 있게 되었다. -- 2021-03-10 16:56 */
|
||||||
|
|
||||||
VP_LoopLink = VP_LoopLink->mp_NextLink ;
|
VP_LoopLink = VP_LoopLink->mp_NextLink ;
|
||||||
}/*
|
}/*
|
||||||
__for0(TypeSize, i, ml_Size)*/
|
__for0(TypeSize, i, ml_Size)*/
|
||||||
|
@ -2327,12 +2327,6 @@ namespace ZNsMain
|
|||||||
ZtCTypeData<TFunctor>::
|
ZtCTypeData<TFunctor>::
|
||||||
GetObjRef(AO_Functor)( VP_LoopLink->mo_Data );
|
GetObjRef(AO_Functor)( VP_LoopLink->mo_Data );
|
||||||
|
|
||||||
/* 위 코드로 인해서, AO_Functor 이 함수일 때 뿐이 아니라,
|
|
||||||
operator() 연산자를 가진 object 포인터일 때도 사용할 수
|
|
||||||
있게 되었다.
|
|
||||||
|
|
||||||
이제는 ZftMCP() 템플릿 함수를 사용해도 된다. -- 2025-09-27 00:38
|
|
||||||
*/
|
|
||||||
VP_LoopLink = VP_LoopLink->mp_NextLink ;
|
VP_LoopLink = VP_LoopLink->mp_NextLink ;
|
||||||
}/*
|
}/*
|
||||||
__for0(TypeSize, i, ml_Size)*/
|
__for0(TypeSize, i, ml_Size)*/
|
||||||
@ -2343,28 +2337,6 @@ namespace ZNsMain
|
|||||||
template<typename TFunctor, typename TTypeHelp>
|
template<typename TFunctor, typename TTypeHelp>
|
||||||
void IterElement(TFunctor AO_Functor, TTypeHelp AO_TypeHelp)
|
void IterElement(TFunctor AO_Functor, TTypeHelp AO_TypeHelp)
|
||||||
{
|
{
|
||||||
/*/////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
■ TTypeHelp 가 class 일 경우, 크기가 커서 참조로 넘어가야 한다면,
|
|
||||||
|
|
||||||
IterElement<myFunctor, myClass&>(myFunctor_obj, myClass_Obj);
|
|
||||||
|
|
||||||
의 형태로 호출할 게 아니라, ZtCObjectPtr<> 을 사용하여,
|
|
||||||
|
|
||||||
myClass myClass_Obj; ZtCObjectPtr<myClass> myCObjPtr(myClass_Obj);
|
|
||||||
|
|
||||||
나
|
|
||||||
|
|
||||||
IterElement(myFunctor_obj, ZtCObjectPtr<myClass>(myClass_Obj));
|
|
||||||
|
|
||||||
형태를 사용하면 좋을 것 같다. -- 2014-06-16 23:11:00
|
|
||||||
|
|
||||||
|
|
||||||
이제는 ZtCRef 과 ZCCheckRef 클래스 템플릿을 사용하면 된다. -- 2021-03-11 11:00
|
|
||||||
다시 말하면 ZftMCP() 템플릿 함수를 사용하면 된다. -- 2025-09-27 01:01
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////*/
|
|
||||||
|
|
||||||
typedef ZNsMain::
|
typedef ZNsMain::
|
||||||
ZtCCheckRef<TTypeHelp> ZCCheckRef;
|
ZtCCheckRef<TTypeHelp> ZCCheckRef;
|
||||||
|
|
||||||
@ -2378,12 +2350,6 @@ namespace ZNsMain
|
|||||||
);
|
);
|
||||||
////////////////////////////////////////////
|
////////////////////////////////////////////
|
||||||
|
|
||||||
/* 위 코드로 인해서, AO_Functor 이 함수일 때 뿐이 아니라, operator()
|
|
||||||
연산자를 가진 object 포인터일 때도 사용할 수 있게 되었다. */
|
|
||||||
|
|
||||||
/* ZCCheckRef::PassData() 으로 인해, 인수를 ZtCRef 클래스를 이용해
|
|
||||||
인수를 참조로 넘길 수 있게 되었다. -- 2021-03-10 16:56 */
|
|
||||||
|
|
||||||
VP_LoopLink = VP_LoopLink->mp_NextLink ;
|
VP_LoopLink = VP_LoopLink->mp_NextLink ;
|
||||||
}/*
|
}/*
|
||||||
__for0(TypeSize, i, ml_Size)*/
|
__for0(TypeSize, i, ml_Size)*/
|
||||||
|
@ -66,42 +66,42 @@ namespace ZNsMain
|
|||||||
<typename TTypFuncIsMore, typename TTypFuncIsLess>
|
<typename TTypFuncIsMore, typename TTypFuncIsLess>
|
||||||
static void QuickSort
|
static void QuickSort
|
||||||
(
|
(
|
||||||
TTypFuncIsMore APF_IsMore ,
|
TTypFuncIsMore APF_IsMore ,
|
||||||
TTypFuncIsLess APF_IsLess ,
|
TTypFuncIsLess APF_IsLess ,
|
||||||
ZCLink* APA_LinkPtrArr[],
|
ZCLink* APA_LinkPtrArr[],
|
||||||
TypeSize AL_FirstIndex ,
|
TypeSize AL_HeadIndex ,
|
||||||
TypeSize AL_LastIndex
|
TypeSize AL_TailIndex
|
||||||
)
|
)
|
||||||
/*##################################################*/
|
/*##################################################*/
|
||||||
{
|
{
|
||||||
if(AL_FirstIndex<AL_LastIndex)
|
if(AL_HeadIndex<AL_TailIndex)
|
||||||
{
|
{
|
||||||
TypeSize i=AL_FirstIndex ;
|
TypeSize i = AL_HeadIndex ;
|
||||||
TypeSize j=AL_LastIndex+1 ;
|
TypeSize j = AL_TailIndex+1 ;
|
||||||
|
|
||||||
ZCLink* VP_PivotLinkPtr=APA_LinkPtrArr[i];
|
ZCLink* VP_PivotLinkPtr = APA_LinkPtrArr[i];
|
||||||
|
|
||||||
do //////
|
do //////
|
||||||
{
|
{
|
||||||
while(AL_LastIndex >i && APF_IsLess(APA_LinkPtrArr[++i]->GetData(), VP_PivotLinkPtr->GetData()));
|
while(AL_TailIndex >i && APF_IsLess(APA_LinkPtrArr[++i]->GetData(), VP_PivotLinkPtr->GetData()) );
|
||||||
while(AL_FirstIndex<j && APF_IsMore(APA_LinkPtrArr[--j]->GetData(), VP_PivotLinkPtr->GetData()));
|
while(AL_HeadIndex <j && APF_IsMore(APA_LinkPtrArr[--j]->GetData(), VP_PivotLinkPtr->GetData()) );
|
||||||
|
|
||||||
if(i<j) SwapLinkPtr(APA_LinkPtrArr[i], APA_LinkPtrArr[j]);
|
if(i<j) SwapLinkPtr( APA_LinkPtrArr[i], APA_LinkPtrArr[j] );
|
||||||
}
|
}
|
||||||
while(i<j);
|
while(i<j);
|
||||||
|
|
||||||
/* SwapLinkPtr(APA_LinkPtrArr[AL_FirstIndex], APA_LinkPtrArr[j]);
|
/* SwapLinkPtr(APA_LinkPtrArr[AL_HeadIndex], APA_LinkPtrArr[j]);
|
||||||
|
|
||||||
위 코드 보다 아래처럼 2 줄로 쓰는게 별도의 스택 변수를 사용하지
|
위 코드 보다 아래처럼 2 줄로 쓰는게 별도의 스택 변수를 사용하지
|
||||||
않아서 좋다.
|
않아서 좋다.
|
||||||
*/
|
*/
|
||||||
APA_LinkPtrArr[AL_FirstIndex]=APA_LinkPtrArr[j];
|
APA_LinkPtrArr[AL_HeadIndex] = APA_LinkPtrArr[j];
|
||||||
APA_LinkPtrArr[j ]=VP_PivotLinkPtr ;
|
APA_LinkPtrArr[j ] = VP_PivotLinkPtr ;
|
||||||
|
|
||||||
QuickSort(APF_IsMore, APF_IsLess, APA_LinkPtrArr, AL_FirstIndex, j-1 );
|
QuickSort(APF_IsMore, APF_IsLess, APA_LinkPtrArr, AL_HeadIndex, j-1 );
|
||||||
QuickSort(APF_IsMore, APF_IsLess, APA_LinkPtrArr, j+1, AL_LastIndex);
|
QuickSort(APF_IsMore, APF_IsLess, APA_LinkPtrArr, j+1, AL_TailIndex);
|
||||||
}/*
|
}/*
|
||||||
if(AL_FirstIndex<AL_LastIndex)*/
|
if(AL_HeadIndex<AL_TailIndex)*/
|
||||||
}/*
|
}/*
|
||||||
template
|
template
|
||||||
<typename TTypFuncIsMore, typename TTypFuncIsLess>
|
<typename TTypFuncIsMore, typename TTypFuncIsLess>
|
||||||
@ -110,91 +110,91 @@ namespace ZNsMain
|
|||||||
TTypFuncIsMore APF_IsMore ,
|
TTypFuncIsMore APF_IsMore ,
|
||||||
TTypFuncIsLess APF_IsLess ,
|
TTypFuncIsLess APF_IsLess ,
|
||||||
ZCLink* APA_LinkPtrArr[],
|
ZCLink* APA_LinkPtrArr[],
|
||||||
TypeSize AL_FirstIndex ,
|
TypeSize AL_HeadIndex ,
|
||||||
TypeSize AL_LastIndex
|
TypeSize AL_TailIndex
|
||||||
)
|
)
|
||||||
###########################################################*/
|
####################################################*/
|
||||||
|
|
||||||
|
|
||||||
static void QuickSortAsc
|
static void QuickSortAsc
|
||||||
(
|
(
|
||||||
ZCLink* APA_LinkPtrArr[], TypeSize AL_FirstIndex, TypeSize AL_LastIndex
|
ZCLink* APA_LinkPtrArr[], TypeSize AL_HeadIndex, TypeSize AL_TailIndex
|
||||||
)
|
)
|
||||||
/*####################*/
|
/*####################*/
|
||||||
{
|
{
|
||||||
if(AL_FirstIndex<AL_LastIndex)
|
if(AL_HeadIndex<AL_TailIndex)
|
||||||
{
|
{
|
||||||
TypeSize i=AL_FirstIndex ;
|
TypeSize i=AL_HeadIndex ;
|
||||||
TypeSize j=AL_LastIndex+1 ;
|
TypeSize j=AL_TailIndex+1 ;
|
||||||
|
|
||||||
ZCLink* VP_PivotLinkPtr=APA_LinkPtrArr[i];
|
ZCLink* VP_PivotLinkPtr = APA_LinkPtrArr[i];
|
||||||
|
|
||||||
do ////
|
do ////
|
||||||
{
|
{
|
||||||
while(AL_LastIndex >i && APA_LinkPtrArr[++i]->GetData() < VP_PivotLinkPtr->GetData());
|
while(AL_TailIndex >i && APA_LinkPtrArr[++i]->GetData() < VP_PivotLinkPtr->GetData());
|
||||||
while(AL_FirstIndex<j && APA_LinkPtrArr[--j]->GetData() > VP_PivotLinkPtr->GetData());
|
while(AL_HeadIndex <j && APA_LinkPtrArr[--j]->GetData() > VP_PivotLinkPtr->GetData());
|
||||||
|
|
||||||
if(i<j) SwapLinkPtr(APA_LinkPtrArr[i], APA_LinkPtrArr[j]);
|
if(i<j) SwapLinkPtr(APA_LinkPtrArr[i], APA_LinkPtrArr[j]);
|
||||||
}
|
}
|
||||||
while(i<j);
|
while(i<j);
|
||||||
|
|
||||||
/* SwapLinkPtr(APA_LinkPtrArr[AL_FirstIndex], APA_LinkPtrArr[j]);
|
/* SwapLinkPtr(APA_LinkPtrArr[AL_HeadIndex], APA_LinkPtrArr[j]);
|
||||||
|
|
||||||
위 코드 보다 아래처럼 2 줄로 쓰는게 별도의 스택 변수를 사용하지 않아서 좋다.*/
|
위 코드 보다 아래처럼 2 줄로 쓰는게 별도의 스택 변수를 사용하지 않아서 좋다.
|
||||||
|
*/
|
||||||
|
APA_LinkPtrArr[AL_HeadIndex] = APA_LinkPtrArr[j] ;
|
||||||
|
APA_LinkPtrArr[j ] = VP_PivotLinkPtr ;
|
||||||
|
|
||||||
APA_LinkPtrArr[AL_FirstIndex]=APA_LinkPtrArr[j];
|
QuickSortAsc(APA_LinkPtrArr, AL_HeadIndex, j-1 );
|
||||||
APA_LinkPtrArr[j ]=VP_PivotLinkPtr ;
|
QuickSortAsc(APA_LinkPtrArr, j+1, AL_TailIndex);
|
||||||
|
|
||||||
QuickSortAsc(APA_LinkPtrArr, AL_FirstIndex, j-1 );
|
|
||||||
QuickSortAsc(APA_LinkPtrArr, j+1, AL_LastIndex);
|
|
||||||
}/*
|
}/*
|
||||||
if(AL_FirstIndex<AL_LastIndex)*/
|
if(AL_HeadIndex<AL_TailIndex)*/
|
||||||
}/*
|
}/*
|
||||||
static void QuickSortAsc
|
static void QuickSortAsc
|
||||||
(
|
(
|
||||||
ZCLink* APA_LinkPtrArr[], TypeSize AL_FirstIndex, TypeSize AL_LastIndex
|
ZCLink* APA_LinkPtrArr[], TypeSize AL_HeadIndex, TypeSize AL_TailIndex
|
||||||
)
|
)
|
||||||
/*####################*/
|
/*####################*/
|
||||||
|
|
||||||
|
|
||||||
static void QuickSortDesc
|
static void QuickSortDesc
|
||||||
(
|
(
|
||||||
ZCLink* APA_LinkPtrArr[], TypeSize AL_FirstIndex, TypeSize AL_LastIndex
|
ZCLink* APA_LinkPtrArr[], TypeSize AL_HeadIndex, TypeSize AL_TailIndex
|
||||||
)
|
)
|
||||||
/*#####################*/
|
/*#####################*/
|
||||||
{
|
{
|
||||||
if(AL_FirstIndex<AL_LastIndex)
|
if(AL_HeadIndex<AL_TailIndex)
|
||||||
{
|
{
|
||||||
TypeSize i=AL_FirstIndex ;
|
TypeSize i= AL_HeadIndex ;
|
||||||
TypeSize j=AL_LastIndex+1;
|
TypeSize j= AL_TailIndex+1;
|
||||||
|
|
||||||
ZCLink* VP_PivotLinkPtr=APA_LinkPtrArr[i];
|
ZCLink* VP_PivotLinkPtr=APA_LinkPtrArr[i];
|
||||||
|
|
||||||
do //////
|
do //////
|
||||||
{
|
{
|
||||||
while(AL_LastIndex >i && APA_LinkPtrArr[++i]->GetData() > VP_PivotLinkPtr->GetData());
|
while(AL_TailIndex >i && APA_LinkPtrArr[++i]->GetData() > VP_PivotLinkPtr->GetData());
|
||||||
while(AL_FirstIndex<j && APA_LinkPtrArr[--j]->GetData() < VP_PivotLinkPtr->GetData());
|
while(AL_HeadIndex <j && APA_LinkPtrArr[--j]->GetData() < VP_PivotLinkPtr->GetData());
|
||||||
|
|
||||||
if(i<j) SwapLinkPtr(APA_LinkPtrArr[i], APA_LinkPtrArr[j]);
|
if(i<j) SwapLinkPtr(APA_LinkPtrArr[i], APA_LinkPtrArr[j]);
|
||||||
}
|
}
|
||||||
while(i<j);
|
while(i<j);
|
||||||
|
|
||||||
/* SwapLinkPtr(APA_LinkPtrArr[AL_FirstIndex], APA_LinkPtrArr[j]);
|
/* SwapLinkPtr(APA_LinkPtrArr[AL_HeadIndex], APA_LinkPtrArr[j]);
|
||||||
|
|
||||||
위 코드 보다 아래처럼 2 줄로 쓰는게 별도의 스택 변수를 사용하지
|
위 코드 보다 아래처럼 2 줄로 쓰는게 별도의 스택 변수를 사용하지
|
||||||
않아서 좋다.
|
않아서 좋다.
|
||||||
*/
|
*/
|
||||||
APA_LinkPtrArr[AL_FirstIndex]=APA_LinkPtrArr[j];
|
APA_LinkPtrArr[AL_HeadIndex]=APA_LinkPtrArr[j];
|
||||||
APA_LinkPtrArr[j ]=VP_PivotLinkPtr ;
|
APA_LinkPtrArr[j ]=VP_PivotLinkPtr ;
|
||||||
|
|
||||||
QuickSortDesc(APA_LinkPtrArr, AL_FirstIndex, j-1);
|
QuickSortDesc(APA_LinkPtrArr, AL_HeadIndex, j-1 );
|
||||||
QuickSortDesc(APA_LinkPtrArr, j+1, AL_LastIndex);
|
QuickSortDesc(APA_LinkPtrArr, j+1, AL_TailIndex);
|
||||||
}/*
|
}/*
|
||||||
if(AL_FirstIndex<AL_LastIndex)*/
|
if(AL_HeadIndex<AL_TailIndex)*/
|
||||||
}/*
|
}/*
|
||||||
static void QuickSortDesc
|
static void QuickSortDesc
|
||||||
(
|
(
|
||||||
ZCLink* APA_LinkPtrArr[], TypeSize AL_FirstIndex, TypeSize AL_LastIndex
|
ZCLink* APA_LinkPtrArr[], TypeSize AL_HeadIndex, TypeSize AL_TailIndex
|
||||||
)
|
)
|
||||||
/*#####################*/
|
/*#####################*/
|
||||||
|
|
||||||
@ -261,7 +261,7 @@ namespace ZNsMain
|
|||||||
{
|
{
|
||||||
if(ARR_CObjList.GetSize()<=1) return;
|
if(ARR_CObjList.GetSize()<=1) return;
|
||||||
|
|
||||||
TypeSize VL_SortSize = ARR_CObjList.GetSize() ;
|
TypeSize VL_SortSize = ARR_CObjList.GetSize() ;
|
||||||
ZCLink** VPP_LinkPtrArr= new ZCLink*[VL_SortSize];
|
ZCLink** VPP_LinkPtrArr= new ZCLink*[VL_SortSize];
|
||||||
|
|
||||||
if(VPP_LinkPtrArr==0)
|
if(VPP_LinkPtrArr==0)
|
||||||
@ -278,8 +278,8 @@ namespace ZNsMain
|
|||||||
|
|
||||||
for(; i<VL_SortSize; ++i)
|
for(; i<VL_SortSize; ++i)
|
||||||
{
|
{
|
||||||
VPP_LinkPtrArr[i]=VP_TempLink;
|
VPP_LinkPtrArr[i]= VP_TempLink;
|
||||||
VP_TempLink =VP_TempLink->GetNextPtr();
|
VP_TempLink = VP_TempLink->GetNextPtr();
|
||||||
}/*
|
}/*
|
||||||
///////////////////////*/
|
///////////////////////*/
|
||||||
|
|
||||||
@ -290,7 +290,7 @@ namespace ZNsMain
|
|||||||
{
|
{
|
||||||
ZCLink::JoinLink(VPP_LinkPtrArr[i-1], VPP_LinkPtrArr[i]);
|
ZCLink::JoinLink(VPP_LinkPtrArr[i-1], VPP_LinkPtrArr[i]);
|
||||||
}/*
|
}/*
|
||||||
//////////////////////////*/
|
for(i=1; i<VL_SortSize; ++i)*/
|
||||||
|
|
||||||
ZCLink::MakeRing
|
ZCLink::MakeRing
|
||||||
(VPP_LinkPtrArr[0], VPP_LinkPtrArr[VL_SortSize-1]);
|
(VPP_LinkPtrArr[0], VPP_LinkPtrArr[VL_SortSize-1]);
|
||||||
@ -457,9 +457,9 @@ namespace ZNsMain
|
|||||||
|
|
||||||
ARR_AddList.JoinBefore ////////////////////
|
ARR_AddList.JoinBefore ////////////////////
|
||||||
(
|
(
|
||||||
ARR_CutList.CutLink(VP_TempLink,1),
|
ARR_CutList.CutLink(VP_TempLink, 1)
|
||||||
VP_LhsTemp,
|
, VP_LhsTemp
|
||||||
VL_LhsTempPos
|
, VL_LhsTempPos
|
||||||
);
|
);
|
||||||
///////////////////////////////////////////
|
///////////////////////////////////////////
|
||||||
|
|
||||||
@ -729,39 +729,39 @@ namespace ZNsMain
|
|||||||
TTypFuncIsMore APF_IsMore ,
|
TTypFuncIsMore APF_IsMore ,
|
||||||
TTypFuncIsLess APF_IsLess ,
|
TTypFuncIsLess APF_IsLess ,
|
||||||
ZCLink* APA_LinkPtrArr[],
|
ZCLink* APA_LinkPtrArr[],
|
||||||
TypeSize AL_FirstIndex ,
|
TypeSize AL_HeadIndex ,
|
||||||
TypeSize AL_LastIndex
|
TypeSize AL_TailIndex
|
||||||
)
|
)
|
||||||
/*##################################################*/
|
/*##################################################*/
|
||||||
{
|
{
|
||||||
if(AL_FirstIndex<AL_LastIndex)
|
if(AL_HeadIndex<AL_TailIndex)
|
||||||
{
|
{
|
||||||
TypeSize i=AL_FirstIndex ;
|
TypeSize i=AL_HeadIndex ;
|
||||||
TypeSize j=AL_LastIndex+1 ;
|
TypeSize j=AL_TailIndex+1 ;
|
||||||
|
|
||||||
ZCLink* VP_PivotLinkPtr=APA_LinkPtrArr[i];
|
ZCLink* VP_PivotLinkPtr=APA_LinkPtrArr[i];
|
||||||
|
|
||||||
do //////
|
do //////
|
||||||
{
|
{
|
||||||
while(AL_LastIndex >i && APF_IsLess(APA_LinkPtrArr[++i]->GetData(), VP_PivotLinkPtr->GetData()));
|
while(AL_TailIndex >i && APF_IsLess(APA_LinkPtrArr[++i]->GetData(), VP_PivotLinkPtr->GetData()));
|
||||||
while(AL_FirstIndex<j && APF_IsMore(APA_LinkPtrArr[--j]->GetData(), VP_PivotLinkPtr->GetData()));
|
while(AL_HeadIndex <j && APF_IsMore(APA_LinkPtrArr[--j]->GetData(), VP_PivotLinkPtr->GetData()));
|
||||||
|
|
||||||
if(i<j) SwapLinkPtr(APA_LinkPtrArr[i], APA_LinkPtrArr[j]);
|
if(i<j) SwapLinkPtr(APA_LinkPtrArr[i], APA_LinkPtrArr[j]);
|
||||||
}
|
}
|
||||||
while(i<j);
|
while(i<j);
|
||||||
|
|
||||||
/* SwapLinkPtr(APA_LinkPtrArr[AL_FirstIndex],APA_LinkPtrArr[j]);
|
/* SwapLinkPtr(APA_LinkPtrArr[AL_HeadIndex],APA_LinkPtrArr[j]);
|
||||||
|
|
||||||
위 코드 보다 아래처럼 2 줄로 쓰는게 별도의 스택 변수를 사용하지
|
위 코드 보다 아래처럼 2 줄로 쓰는게 별도의 스택 변수를 사용하지
|
||||||
않아서 좋다.
|
않아서 좋다.
|
||||||
*/
|
*/
|
||||||
APA_LinkPtrArr[AL_FirstIndex]=APA_LinkPtrArr[j];
|
APA_LinkPtrArr[AL_HeadIndex]=APA_LinkPtrArr[j];
|
||||||
APA_LinkPtrArr[j ]=VP_PivotLinkPtr ;
|
APA_LinkPtrArr[j ]=VP_PivotLinkPtr ;
|
||||||
|
|
||||||
QuickSort(APF_IsMore, APF_IsLess, APA_LinkPtrArr, AL_FirstIndex, j-1 );
|
QuickSort(APF_IsMore, APF_IsLess, APA_LinkPtrArr, AL_HeadIndex, j-1 );
|
||||||
QuickSort(APF_IsMore, APF_IsLess, APA_LinkPtrArr, j+1, AL_LastIndex);
|
QuickSort(APF_IsMore, APF_IsLess, APA_LinkPtrArr, j+1, AL_TailIndex);
|
||||||
}/*
|
}/*
|
||||||
if(AL_FirstIndex<AL_LastIndex)*/
|
if(AL_HeadIndex<AL_TailIndex)*/
|
||||||
}/*
|
}/*
|
||||||
template
|
template
|
||||||
<typename TTypFuncIsMore, typename TTypFuncIsLess>
|
<typename TTypFuncIsMore, typename TTypFuncIsLess>
|
||||||
@ -770,8 +770,8 @@ namespace ZNsMain
|
|||||||
TTypFuncIsMore APF_IsMore ,
|
TTypFuncIsMore APF_IsMore ,
|
||||||
TTypFuncIsLess APF_IsLess ,
|
TTypFuncIsLess APF_IsLess ,
|
||||||
ZCLink* APA_LinkPtrArr[],
|
ZCLink* APA_LinkPtrArr[],
|
||||||
TypeSize AL_FirstIndex ,
|
TypeSize AL_HeadIndex ,
|
||||||
TypeSize AL_LastIndex
|
TypeSize AL_TailIndex
|
||||||
)
|
)
|
||||||
/*##################################################*/
|
/*##################################################*/
|
||||||
|
|
||||||
@ -812,13 +812,14 @@ namespace ZNsMain
|
|||||||
}
|
}
|
||||||
/////////////////////////
|
/////////////////////////
|
||||||
|
|
||||||
QuickSort(APF_IsMore, APF_IsLess, VPP_LinkPtrArr, 0, VL_SortSize-1);
|
QuickSort
|
||||||
|
(APF_IsMore, APF_IsLess, VPP_LinkPtrArr, 0, VL_SortSize-1);
|
||||||
|
|
||||||
for(i=1; i<VL_SortSize; ++i) // VL_SortSize-1 번 순환
|
for(i=1; i<VL_SortSize; ++i) // VL_SortSize-1 번 순환
|
||||||
{
|
{
|
||||||
ZCLink::JoinLink(VPP_LinkPtrArr[i-1], VPP_LinkPtrArr[i]);
|
ZCLink::JoinLink(VPP_LinkPtrArr[i-1], VPP_LinkPtrArr[i]);
|
||||||
}
|
}
|
||||||
////////////////////////////
|
/*++++++++++++++++++++++++*/
|
||||||
|
|
||||||
#if(_CODE_OLD_) // 아래 코드만 빠진다.
|
#if(_CODE_OLD_) // 아래 코드만 빠진다.
|
||||||
ZCLink::MakeRing(VPP_LinkPtrArr[0], VPP_LinkPtrArr[VL_SortSize-1]);
|
ZCLink::MakeRing(VPP_LinkPtrArr[0], VPP_LinkPtrArr[VL_SortSize-1]);
|
||||||
|
Reference in New Issue
Block a user