commit 2025-09-28 10:30 edit a bit ZCppMain/ZtCSortObjList.H
This commit is contained in:
@ -66,42 +66,42 @@ namespace ZNsMain
|
||||
<typename TTypFuncIsMore, typename TTypFuncIsLess>
|
||||
static void QuickSort
|
||||
(
|
||||
TTypFuncIsMore APF_IsMore ,
|
||||
TTypFuncIsLess APF_IsLess ,
|
||||
ZCLink* APA_LinkPtrArr[],
|
||||
TypeSize AL_FirstIndex ,
|
||||
TypeSize AL_LastIndex
|
||||
TTypFuncIsMore APF_IsMore ,
|
||||
TTypFuncIsLess APF_IsLess ,
|
||||
ZCLink* APA_LinkPtrArr[],
|
||||
TypeSize AL_HeadIndex ,
|
||||
TypeSize AL_TailIndex
|
||||
)
|
||||
/*##################################################*/
|
||||
{
|
||||
if(AL_FirstIndex<AL_LastIndex)
|
||||
if(AL_HeadIndex<AL_TailIndex)
|
||||
{
|
||||
TypeSize i=AL_FirstIndex ;
|
||||
TypeSize j=AL_LastIndex+1 ;
|
||||
TypeSize i = AL_HeadIndex ;
|
||||
TypeSize j = AL_TailIndex+1 ;
|
||||
|
||||
ZCLink* VP_PivotLinkPtr=APA_LinkPtrArr[i];
|
||||
ZCLink* VP_PivotLinkPtr = APA_LinkPtrArr[i];
|
||||
|
||||
do //////
|
||||
{
|
||||
while(AL_LastIndex >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_TailIndex >i && APF_IsLess(APA_LinkPtrArr[++i]->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);
|
||||
|
||||
/* SwapLinkPtr(APA_LinkPtrArr[AL_FirstIndex], APA_LinkPtrArr[j]);
|
||||
/* SwapLinkPtr(APA_LinkPtrArr[AL_HeadIndex], APA_LinkPtrArr[j]);
|
||||
|
||||
위 코드 보다 아래처럼 2 줄로 쓰는게 별도의 스택 변수를 사용하지
|
||||
않아서 좋다.
|
||||
*/
|
||||
APA_LinkPtrArr[AL_FirstIndex]=APA_LinkPtrArr[j];
|
||||
APA_LinkPtrArr[j ]=VP_PivotLinkPtr ;
|
||||
APA_LinkPtrArr[AL_HeadIndex] = APA_LinkPtrArr[j];
|
||||
APA_LinkPtrArr[j ] = VP_PivotLinkPtr ;
|
||||
|
||||
QuickSort(APF_IsMore, APF_IsLess, APA_LinkPtrArr, AL_FirstIndex, j-1 );
|
||||
QuickSort(APF_IsMore, APF_IsLess, APA_LinkPtrArr, j+1, AL_LastIndex);
|
||||
QuickSort(APF_IsMore, APF_IsLess, APA_LinkPtrArr, AL_HeadIndex, j-1 );
|
||||
QuickSort(APF_IsMore, APF_IsLess, APA_LinkPtrArr, j+1, AL_TailIndex);
|
||||
}/*
|
||||
if(AL_FirstIndex<AL_LastIndex)*/
|
||||
if(AL_HeadIndex<AL_TailIndex)*/
|
||||
}/*
|
||||
template
|
||||
<typename TTypFuncIsMore, typename TTypFuncIsLess>
|
||||
@ -110,91 +110,91 @@ namespace ZNsMain
|
||||
TTypFuncIsMore APF_IsMore ,
|
||||
TTypFuncIsLess APF_IsLess ,
|
||||
ZCLink* APA_LinkPtrArr[],
|
||||
TypeSize AL_FirstIndex ,
|
||||
TypeSize AL_LastIndex
|
||||
TypeSize AL_HeadIndex ,
|
||||
TypeSize AL_TailIndex
|
||||
)
|
||||
###########################################################*/
|
||||
####################################################*/
|
||||
|
||||
|
||||
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 j=AL_LastIndex+1 ;
|
||||
TypeSize i=AL_HeadIndex ;
|
||||
TypeSize j=AL_TailIndex+1 ;
|
||||
|
||||
ZCLink* VP_PivotLinkPtr=APA_LinkPtrArr[i];
|
||||
ZCLink* VP_PivotLinkPtr = APA_LinkPtrArr[i];
|
||||
|
||||
do ////
|
||||
{
|
||||
while(AL_LastIndex >i && APA_LinkPtrArr[++i]->GetData() < VP_PivotLinkPtr->GetData());
|
||||
while(AL_FirstIndex<j && APA_LinkPtrArr[--j]->GetData() > VP_PivotLinkPtr->GetData());
|
||||
while(AL_TailIndex >i && APA_LinkPtrArr[++i]->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]);
|
||||
}
|
||||
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];
|
||||
APA_LinkPtrArr[j ]=VP_PivotLinkPtr ;
|
||||
|
||||
QuickSortAsc(APA_LinkPtrArr, AL_FirstIndex, j-1 );
|
||||
QuickSortAsc(APA_LinkPtrArr, j+1, AL_LastIndex);
|
||||
QuickSortAsc(APA_LinkPtrArr, AL_HeadIndex, j-1 );
|
||||
QuickSortAsc(APA_LinkPtrArr, j+1, AL_TailIndex);
|
||||
}/*
|
||||
if(AL_FirstIndex<AL_LastIndex)*/
|
||||
if(AL_HeadIndex<AL_TailIndex)*/
|
||||
}/*
|
||||
static void QuickSortAsc
|
||||
(
|
||||
ZCLink* APA_LinkPtrArr[], TypeSize AL_FirstIndex, TypeSize AL_LastIndex
|
||||
ZCLink* APA_LinkPtrArr[], TypeSize AL_HeadIndex, TypeSize AL_TailIndex
|
||||
)
|
||||
/*####################*/
|
||||
|
||||
|
||||
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 j=AL_LastIndex+1;
|
||||
TypeSize i= AL_HeadIndex ;
|
||||
TypeSize j= AL_TailIndex+1;
|
||||
|
||||
ZCLink* VP_PivotLinkPtr=APA_LinkPtrArr[i];
|
||||
|
||||
do //////
|
||||
{
|
||||
while(AL_LastIndex >i && APA_LinkPtrArr[++i]->GetData() > VP_PivotLinkPtr->GetData());
|
||||
while(AL_FirstIndex<j && APA_LinkPtrArr[--j]->GetData() < VP_PivotLinkPtr->GetData());
|
||||
while(AL_TailIndex >i && APA_LinkPtrArr[++i]->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]);
|
||||
}
|
||||
while(i<j);
|
||||
|
||||
/* SwapLinkPtr(APA_LinkPtrArr[AL_FirstIndex], APA_LinkPtrArr[j]);
|
||||
/* SwapLinkPtr(APA_LinkPtrArr[AL_HeadIndex], APA_LinkPtrArr[j]);
|
||||
|
||||
위 코드 보다 아래처럼 2 줄로 쓰는게 별도의 스택 변수를 사용하지
|
||||
않아서 좋다.
|
||||
*/
|
||||
APA_LinkPtrArr[AL_FirstIndex]=APA_LinkPtrArr[j];
|
||||
APA_LinkPtrArr[j ]=VP_PivotLinkPtr ;
|
||||
APA_LinkPtrArr[AL_HeadIndex]=APA_LinkPtrArr[j];
|
||||
APA_LinkPtrArr[j ]=VP_PivotLinkPtr ;
|
||||
|
||||
QuickSortDesc(APA_LinkPtrArr, AL_FirstIndex, j-1);
|
||||
QuickSortDesc(APA_LinkPtrArr, j+1, AL_LastIndex);
|
||||
QuickSortDesc(APA_LinkPtrArr, AL_HeadIndex, j-1 );
|
||||
QuickSortDesc(APA_LinkPtrArr, j+1, AL_TailIndex);
|
||||
}/*
|
||||
if(AL_FirstIndex<AL_LastIndex)*/
|
||||
if(AL_HeadIndex<AL_TailIndex)*/
|
||||
}/*
|
||||
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;
|
||||
|
||||
TypeSize VL_SortSize = ARR_CObjList.GetSize() ;
|
||||
TypeSize VL_SortSize = ARR_CObjList.GetSize() ;
|
||||
ZCLink** VPP_LinkPtrArr= new ZCLink*[VL_SortSize];
|
||||
|
||||
if(VPP_LinkPtrArr==0)
|
||||
@ -278,8 +278,8 @@ namespace ZNsMain
|
||||
|
||||
for(; i<VL_SortSize; ++i)
|
||||
{
|
||||
VPP_LinkPtrArr[i]=VP_TempLink;
|
||||
VP_TempLink =VP_TempLink->GetNextPtr();
|
||||
VPP_LinkPtrArr[i]= VP_TempLink;
|
||||
VP_TempLink = VP_TempLink->GetNextPtr();
|
||||
}/*
|
||||
///////////////////////*/
|
||||
|
||||
@ -290,7 +290,7 @@ namespace ZNsMain
|
||||
{
|
||||
ZCLink::JoinLink(VPP_LinkPtrArr[i-1], VPP_LinkPtrArr[i]);
|
||||
}/*
|
||||
//////////////////////////*/
|
||||
for(i=1; i<VL_SortSize; ++i)*/
|
||||
|
||||
ZCLink::MakeRing
|
||||
(VPP_LinkPtrArr[0], VPP_LinkPtrArr[VL_SortSize-1]);
|
||||
@ -457,9 +457,9 @@ namespace ZNsMain
|
||||
|
||||
ARR_AddList.JoinBefore ////////////////////
|
||||
(
|
||||
ARR_CutList.CutLink(VP_TempLink,1),
|
||||
VP_LhsTemp,
|
||||
VL_LhsTempPos
|
||||
ARR_CutList.CutLink(VP_TempLink, 1)
|
||||
, VP_LhsTemp
|
||||
, VL_LhsTempPos
|
||||
);
|
||||
///////////////////////////////////////////
|
||||
|
||||
@ -729,39 +729,39 @@ namespace ZNsMain
|
||||
TTypFuncIsMore APF_IsMore ,
|
||||
TTypFuncIsLess APF_IsLess ,
|
||||
ZCLink* APA_LinkPtrArr[],
|
||||
TypeSize AL_FirstIndex ,
|
||||
TypeSize AL_LastIndex
|
||||
TypeSize AL_HeadIndex ,
|
||||
TypeSize AL_TailIndex
|
||||
)
|
||||
/*##################################################*/
|
||||
{
|
||||
if(AL_FirstIndex<AL_LastIndex)
|
||||
if(AL_HeadIndex<AL_TailIndex)
|
||||
{
|
||||
TypeSize i=AL_FirstIndex ;
|
||||
TypeSize j=AL_LastIndex+1 ;
|
||||
TypeSize i=AL_HeadIndex ;
|
||||
TypeSize j=AL_TailIndex+1 ;
|
||||
|
||||
ZCLink* VP_PivotLinkPtr=APA_LinkPtrArr[i];
|
||||
|
||||
do //////
|
||||
{
|
||||
while(AL_LastIndex >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_TailIndex >i && APF_IsLess(APA_LinkPtrArr[++i]->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]);
|
||||
}
|
||||
while(i<j);
|
||||
|
||||
/* SwapLinkPtr(APA_LinkPtrArr[AL_FirstIndex],APA_LinkPtrArr[j]);
|
||||
/* SwapLinkPtr(APA_LinkPtrArr[AL_HeadIndex],APA_LinkPtrArr[j]);
|
||||
|
||||
위 코드 보다 아래처럼 2 줄로 쓰는게 별도의 스택 변수를 사용하지
|
||||
않아서 좋다.
|
||||
*/
|
||||
APA_LinkPtrArr[AL_FirstIndex]=APA_LinkPtrArr[j];
|
||||
APA_LinkPtrArr[j ]=VP_PivotLinkPtr ;
|
||||
APA_LinkPtrArr[AL_HeadIndex]=APA_LinkPtrArr[j];
|
||||
APA_LinkPtrArr[j ]=VP_PivotLinkPtr ;
|
||||
|
||||
QuickSort(APF_IsMore, APF_IsLess, APA_LinkPtrArr, AL_FirstIndex, j-1 );
|
||||
QuickSort(APF_IsMore, APF_IsLess, APA_LinkPtrArr, j+1, AL_LastIndex);
|
||||
QuickSort(APF_IsMore, APF_IsLess, APA_LinkPtrArr, AL_HeadIndex, j-1 );
|
||||
QuickSort(APF_IsMore, APF_IsLess, APA_LinkPtrArr, j+1, AL_TailIndex);
|
||||
}/*
|
||||
if(AL_FirstIndex<AL_LastIndex)*/
|
||||
if(AL_HeadIndex<AL_TailIndex)*/
|
||||
}/*
|
||||
template
|
||||
<typename TTypFuncIsMore, typename TTypFuncIsLess>
|
||||
@ -770,8 +770,8 @@ namespace ZNsMain
|
||||
TTypFuncIsMore APF_IsMore ,
|
||||
TTypFuncIsLess APF_IsLess ,
|
||||
ZCLink* APA_LinkPtrArr[],
|
||||
TypeSize AL_FirstIndex ,
|
||||
TypeSize AL_LastIndex
|
||||
TypeSize AL_HeadIndex ,
|
||||
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 번 순환
|
||||
{
|
||||
ZCLink::JoinLink(VPP_LinkPtrArr[i-1], VPP_LinkPtrArr[i]);
|
||||
}
|
||||
////////////////////////////
|
||||
/*++++++++++++++++++++++++*/
|
||||
|
||||
#if(_CODE_OLD_) // 아래 코드만 빠진다.
|
||||
ZCLink::MakeRing(VPP_LinkPtrArr[0], VPP_LinkPtrArr[VL_SortSize-1]);
|
||||
|
Reference in New Issue
Block a user