commit 2025-08-17 02:51 utf8 변환 : ZCppMain/ZtCSortObjList.H

This commit is contained in:
2025-08-17 02:51:48 +09:00
parent d67337476f
commit 95527d0544

View File

@ -1,4 +1,4 @@

#ifndef __ZCPPMAIN__ZCSORT_LIST_H__ #ifndef __ZCPPMAIN__ZCSORT_LIST_H__
#define __ZCPPMAIN__ZCSORT_LIST_H__ #define __ZCPPMAIN__ZCSORT_LIST_H__
@ -6,7 +6,7 @@
/*//////////////////////////////////////////////////// /*////////////////////////////////////////////////////
<EFBFBD><EFBFBD> CDoublieList.H <EFBFBD><EFBFBD> CObjList.H <EFBFBD><EFBFBD> include <EFBFBD>Ѵ<EFBFBD>. CDoublieList.H CObjList.H include 한다.
-- 2013-04-30 22:57:00 -- 2013-04-30 22:57:00
@ -19,7 +19,7 @@
namespace ZNsMain namespace ZNsMain
{ {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E1B8AE>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>. // 양방향 연결리스트에 대한 정렬 클래스이다.
template<typename TTypObjList> class ZtCSortObjList template<typename TTypObjList> class ZtCSortObjList
{ {
@ -32,8 +32,8 @@ namespace ZNsMain
static inline bool IsMore(TypeArg AR_LeftType, TypeArg AR_RightType) static inline bool IsMore(TypeArg AR_LeftType, TypeArg AR_RightType)
{ {
/* IsMore() <EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD> IsLess() <EFBFBD><EFBFBD> QuickSort() <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> /* IsMore() 함수와 IsLess() QuickSort() 멤버 함수에서 쓰는
<EFBFBD>Լ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD>. */ 함수 포인터에 대입하기 위해서 정의하였다. */
return AR_LeftType > AR_RightType ; return AR_LeftType > AR_RightType ;
}/* }/*
@ -83,8 +83,8 @@ namespace ZNsMain
/* SwapLinkPtr(APA_LinkPtrArr[AL_FirstIndex], APA_LinkPtrArr[j]); /* SwapLinkPtr(APA_LinkPtrArr[AL_FirstIndex], APA_LinkPtrArr[j]);
<EFBFBD><EFBFBD> <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ʒ<EFBFBD>ó<EFBFBD><C3B3> 2 <20>ٷ<EFBFBD> <20><><EFBFBD>°<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 위 코드 보다 아래처럼 2 줄로 쓰는게 별도의 스택 변수를 사용하지
<EFBFBD>ʾƼ<EFBFBD> <20><><EFBFBD><EFBFBD>. 않아서 좋다.
*/ */
APA_LinkPtrArr[AL_FirstIndex]=APA_LinkPtrArr[j]; APA_LinkPtrArr[AL_FirstIndex]=APA_LinkPtrArr[j];
APA_LinkPtrArr[j ]=VP_PivotLinkPtr ; APA_LinkPtrArr[j ]=VP_PivotLinkPtr ;
@ -131,7 +131,7 @@ namespace ZNsMain
/* SwapLinkPtr(APA_LinkPtrArr[AL_FirstIndex], APA_LinkPtrArr[j]); /* SwapLinkPtr(APA_LinkPtrArr[AL_FirstIndex], APA_LinkPtrArr[j]);
<EFBFBD><EFBFBD> <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ʒ<EFBFBD>ó<EFBFBD><C3B3> 2 <20>ٷ<EFBFBD> <20><><EFBFBD>°<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʾƼ<CABE> <20><><EFBFBD><EFBFBD>.*/ 위 코드 보다 아래처럼 2 줄로 쓰는게 별도의 스택 변수를 사용하지 않아서 좋다.*/
APA_LinkPtrArr[AL_FirstIndex]=APA_LinkPtrArr[j]; APA_LinkPtrArr[AL_FirstIndex]=APA_LinkPtrArr[j];
APA_LinkPtrArr[j ]=VP_PivotLinkPtr ; APA_LinkPtrArr[j ]=VP_PivotLinkPtr ;
@ -172,8 +172,8 @@ namespace ZNsMain
/* SwapLinkPtr(APA_LinkPtrArr[AL_FirstIndex], APA_LinkPtrArr[j]); /* SwapLinkPtr(APA_LinkPtrArr[AL_FirstIndex], APA_LinkPtrArr[j]);
<EFBFBD><EFBFBD> <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ʒ<EFBFBD>ó<EFBFBD><C3B3> 2 <20>ٷ<EFBFBD> <20><><EFBFBD>°<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 위 코드 보다 아래처럼 2 줄로 쓰는게 별도의 스택 변수를 사용하지
<EFBFBD>ʾƼ<EFBFBD> <20><><EFBFBD><EFBFBD>. 않아서 좋다.
*/ */
APA_LinkPtrArr[AL_FirstIndex]=APA_LinkPtrArr[j]; APA_LinkPtrArr[AL_FirstIndex]=APA_LinkPtrArr[j];
APA_LinkPtrArr[j ]=VP_PivotLinkPtr ; APA_LinkPtrArr[j ]=VP_PivotLinkPtr ;
@ -224,7 +224,7 @@ namespace ZNsMain
QuickSortAsc (VPP_LinkPtrArr, 0, VL_SortSize-1); QuickSortAsc (VPP_LinkPtrArr, 0, VL_SortSize-1);
else QuickSortDesc(VPP_LinkPtrArr, 0, VL_SortSize-1); else QuickSortDesc(VPP_LinkPtrArr, 0, VL_SortSize-1);
for(i=1; i<VL_SortSize; ++i) // VL_SortSize-1 <EFBFBD><EFBFBD> <20><>ȯ 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]);
}/* }/*
@ -277,7 +277,7 @@ namespace ZNsMain
QuickSort QuickSort
(APF_IsMore, APF_IsLess, VPP_LinkPtrArr, 0, VL_SortSize-1); (APF_IsMore, APF_IsLess, VPP_LinkPtrArr, 0, VL_SortSize-1);
for(i=1; i<VL_SortSize; ++i) // VL_SortSize-1 <EFBFBD><EFBFBD> <20><>ȯ 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]);
}/* }/*
@ -312,7 +312,7 @@ namespace ZNsMain
) )
/*##################################################*/ /*##################################################*/
{ {
// AP_HeadLink <EFBFBD><EFBFBD><EFBFBD><EFBFBD> AP_TailLink <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> // AP_HeadLink 부터 AP_TailLink 까지만 정렬
#ifdef _DEBUG #ifdef _DEBUG
@ -368,7 +368,7 @@ namespace ZNsMain
QuickSortAsc (VPP_LinkPtrArr, 0, VL_SortSize-1); QuickSortAsc (VPP_LinkPtrArr, 0, VL_SortSize-1);
else QuickSortDesc(VPP_LinkPtrArr, 0, VL_SortSize-1); else QuickSortDesc(VPP_LinkPtrArr, 0, VL_SortSize-1);
for(i=1; i<VL_SortSize; ++i) // VL_SortSize-1 <EFBFBD><EFBFBD> <20><>ȯ 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]);
}/* }/*
@ -400,11 +400,11 @@ namespace ZNsMain
{ {
/*///////////////////////////////////////////////////////////////////////////// /*/////////////////////////////////////////////////////////////////////////////
<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E1B8AE>Ʈ ARR_AddList <EFBFBD><EFBFBD> ARR_CutList <EFBFBD><EFBFBD> <20>̹<EFBFBD> <20><><EFBFBD>ĵǾ<C4B5> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> ■ 연결리스트 ARR_AddList ARR_CutList 는 이미 정렬되어 있는 것으로 간주하여
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ǽ<EFBFBD><C7BD>Ѵ<EFBFBD>. ARR_CutList <20><> <20><> <20><>ũ<EFBFBD><C5A9><EFBFBD><EFBFBD> <20><><EFBFBD>ʷ<EFBFBD> <20><><EFBFBD><EFBFBD> ARR_AddList <EFBFBD><EFBFBD> 병합 정렬을 실시한다. ARR_CutList 의 앞 링크부터 차례로 끊어 ARR_AddList
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>. <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ARR_AddList <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ĵǾ<C4B5> 적당한 링크에 삽입한다. 이 병합 정렬은 ARR_AddList 가 오름차순으로 정렬되어
<EFBFBD>ִٸ<EFBFBD> ARR_CutList <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ĵǾ<C4B5> <20>־<EFBFBD><D6BE><EFBFBD> <20>ϰ<EFBFBD>, AB_IsAscending <EFBFBD><EFBFBD> 있다면 ARR_CutList 도 오름차순으로 정렬되어 있어야 하고, AB_IsAscending
true <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD>. true 여야 원하는 결과를 얻을 수 있다.
/////////////////////////////////////////////////////////////////////////////*/ /////////////////////////////////////////////////////////////////////////////*/
@ -412,8 +412,8 @@ namespace ZNsMain
ARR_AddList.mp_HeadLink==0 || ARR_AddList.mp_HeadLink==0 ||
ARR_CutList.mp_HeadLink==0 ) return ; ARR_CutList.mp_HeadLink==0 ) return ;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><>ȣ<EFBFBD><C8A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><>¥<EFBFBD><C2A5> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD><EFBFBD>, /* 먼저 각 리스크를 삭제하는 신호를 보낸다. 진짜로 삭제하는 것은 아니지만,
<EFBFBD><EFBFBD>ũ<EFBFBD><EFBFBD> <20>̵<EFBFBD><CCB5><EFBFBD>Ű<EFBFBD><C5B0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߻<EFBFBD><DFBB><EFBFBD> <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>µ<EFBFBD><C2B5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ȴ<EFBFBD>. */ 링크를 이동시키는 과정에서 발생할 수 있는 에러를 막는데는 도움이 된다. */
ARR_AddList.OnDelete( ARR_AddList.mp_HeadLink, 1, ARR_AddList.OnDelete( ARR_AddList.mp_HeadLink, 1,
ARR_AddList.mp_HeadLink->mp_PrevLink, ARR_AddList.ml_Size ); ARR_AddList.mp_HeadLink->mp_PrevLink, ARR_AddList.ml_Size );
@ -427,7 +427,7 @@ namespace ZNsMain
if(pf_IsTrueValue(ARR_AddList.GetTailData(), ARR_CutList.GetHeadData())==false) if(pf_IsTrueValue(ARR_AddList.GetTailData(), ARR_CutList.GetHeadData())==false)
{ {
ARR_AddList.JoinTail(ARR_CutList); return; // <EFBFBD>̶<EFBFBD><EFBFBD><EFBFBD> <20><> <20>̻<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʿ䰡 <20><><EFBFBD><EFBFBD>. ARR_AddList.JoinTail(ARR_CutList); return; // 이때는 더 이상 비교할 필요가 없다.
}/* }/*
if(pf_IsTrueValue(ARR_AddList.GetTailData(), ARR_CutList.GetHeadData())==false)*/ if(pf_IsTrueValue(ARR_AddList.GetTailData(), ARR_CutList.GetHeadData())==false)*/
@ -435,7 +435,7 @@ namespace ZNsMain
ZCLink* VP_LhsTemp =ARR_AddList.mp_HeadLink; ZCLink* VP_LhsTemp =ARR_AddList.mp_HeadLink;
ZCLink* VP_RhsHead =ARR_CutList.mp_HeadLink; ZCLink* VP_RhsHead =ARR_CutList.mp_HeadLink;
TypeSize VL_LhsTempPos=1 ; // VP_LhsTemp <EFBFBD><EFBFBD> <20><>ġ TypeSize VL_LhsTempPos=1 ; // VP_LhsTemp 의 위치
bool VB_IsMoved =false; bool VB_IsMoved =false;
ZCLink* VP_TempLink =0 ; ZCLink* VP_TempLink =0 ;
@ -451,8 +451,8 @@ namespace ZNsMain
VL_LhsTempPos VL_LhsTempPos
/*/////////////////*/ ); ////////////////////////////////// /*/////////////////*/ ); //////////////////////////////////
/* VP_LhsTemp <EFBFBD>տ<EFBFBD> <20><>ũ<EFBFBD><C5A9> <20>ϳ<EFBFBD> <20><><EFBFBD>ԵǾ<D4B5><C7BE><EFBFBD><EFBFBD>Ƿ<EFBFBD>, /* VP_LhsTemp 앞에 링크가 하나 삽입되었으므로,
VP_LhsTemp <EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1><EFBFBD><EFBFBD> <20>ϳ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ų<EFBFBD><C5B2>. */ VP_LhsTemp 의 위치값을 하나 증가시킨다. */
++VL_LhsTempPos; VB_IsMoved=true; ++VL_LhsTempPos; VB_IsMoved=true;
}/* }/*
@ -489,7 +489,7 @@ namespace ZNsMain
bool AB_IsAscending=true bool AB_IsAscending=true
/*#########*/ ) /*#########################################*/ /*#########*/ ) /*#########################################*/
{ {
// ARR_CObjList <EFBFBD><EFBFBD> <20><> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. // ARR_CObjList 의 각 노드를 유일하게 만든다.
if(AB_IsSorted==false) if(AB_IsSorted==false)
QuickSort(ARR_CObjList,AB_IsAscending); QuickSort(ARR_CObjList,AB_IsAscending);
@ -499,8 +499,8 @@ namespace ZNsMain
ZCLink* VP_HeadLink= ARR_CObjList.GetHeadLinkPtr(); ZCLink* VP_HeadLink= ARR_CObjList.GetHeadLinkPtr();
ZCLink* VP_CutLink = 0 ; ZCLink* VP_CutLink = 0 ;
/* VL_LoopSize-1 <EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>ϸ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ұ<EFBFBD> <20>̿<EFBFBD><CCBF>Ѵٸ<D1B4> /* VL_LoopSize-1 번 순환하며 같은 원소가 이웃한다면
<EFBFBD>յ<EFBFBD> <20><><EFBFBD><20><><EFBFBD><EFBFBD> <20> ó<><C3B3><EFBFBD><EFBFBD> <20>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>. */ 앞뒤 노드에 대해 어떤 처리를 하고 뒤쪽의 노드를 삭제한다. */
for(TypeSize i=1; i<VL_LoopSize; ++i) for(TypeSize i=1; i<VL_LoopSize; ++i)
{ {
@ -534,7 +534,7 @@ namespace ZNsMain
bool AB_IsAscending=true bool AB_IsAscending=true
/*#########*/ ) /*#########################################*/ /*#########*/ ) /*#########################################*/
{ {
// ARR_CObjList <EFBFBD><EFBFBD> <20><> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. // ARR_CObjList 의 각 노드를 유일하게 만든다.
if(AB_IsSorted==false) if(AB_IsSorted==false)
QuickSort(ARR_CObjList,AB_IsAscending); QuickSort(ARR_CObjList,AB_IsAscending);
@ -544,8 +544,8 @@ namespace ZNsMain
ZCLink* VP_HeadLink =ARR_CObjList.GetHeadLinkPtr(); ZCLink* VP_HeadLink =ARR_CObjList.GetHeadLinkPtr();
ZCLink* VP_CutLink =0 ; ZCLink* VP_CutLink =0 ;
/* VL_LoopSize-1 <EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>ϸ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ұ<EFBFBD> <20>̿<EFBFBD><CCBF>Ѵٸ<D1B4> /* VL_LoopSize-1 번 순환하며 같은 원소가 이웃한다면
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>. 뒤쪽의 노드를 삭제한다.
*/ */
for(TypeSize i=1; i<VL_LoopSize; ++i) for(TypeSize i=1; i<VL_LoopSize; ++i)
{ {
@ -576,14 +576,14 @@ namespace ZNsMain
bool AB_IsAscending=true bool AB_IsAscending=true
/*#########*/ ) /*#########################################*/ /*#########*/ ) /*#########################################*/
{ {
/* ARR_CObjList <EFBFBD><EFBFBD> <20><> <20><><EFBFBD><20><><EFBFBD><EFBFBD> <20>ͳ<EFBFBD><CDB3><EFBFBD> <20>׷<EFBFBD><D7B7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> /* ARR_CObjList 의 각 노드를 같은 것끼리 그룹으로 묵어서
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> AR_Functor <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>. 묶여진 리스트에 대해 AR_Functor 를 수행한다.
*/ */
if(ARR_CObjList.IsEmpty()) return; if(ARR_CObjList.IsEmpty()) return;
if(AB_IsSorted==false) if(AB_IsSorted==false)
{ {
QuickSort(ARR_CObjList, AB_IsAscending); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ȵǾ<C8B5><C7BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϰ<EFBFBD>... QuickSort(ARR_CObjList, AB_IsAscending); // 정렬이 안되었으면 정렬을 하고...
}/* }/*
if(AB_IsSorted==false)*/ if(AB_IsSorted==false)*/
@ -594,7 +594,7 @@ namespace ZNsMain
ZCLink* VP_CutTail =VP_CutHead ; ZCLink* VP_CutTail =VP_CutHead ;
ZCLink* VP_CutTemp =VP_CutTail->GetNextPtr() ; ZCLink* VP_CutTemp =VP_CutTail->GetNextPtr() ;
// VL_LoopSize-1 <EFBFBD><EFBFBD> <20><>ȯ // VL_LoopSize-1 번 순환
for(TypeSize i=2; i<=VL_LoopSize; ++i) for(TypeSize i=2; i<=VL_LoopSize; ++i)
{ {
@ -607,11 +607,11 @@ namespace ZNsMain
} }
else // VP_CutTail->GetData()!=VP_CutTemp->GetData() else // VP_CutTail->GetData()!=VP_CutTemp->GetData()
{ {
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٸ<EFBFBD><D9B8><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ٴ<EFBFBD> <20><><EFBFBD>̴<EFBFBD>. /* 다음 노드와 다르면 이전 노드들은 서로 같다는 것이다.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> functor <20><> ó<><C3B3><EFBFBD><EFBFBD> <20>ѱ<EFBFBD><D1B1><EFBFBD>. functor <EFBFBD><EFBFBD> 이전 노드들은 functor 로 처리를 넘긴다. functor
<EFBFBD>Ѱܹ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20>ݵ<EFBFBD><DDB5><EFBFBD> <20><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD>) <20>Ѵ<EFBFBD>. CutLink() 넘겨받은 리스트를 반드시 써야(삭제해야) 한다. CutLink()
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD> <20><><EFBFBD>ο<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִµ<D6B4> 멤버 함수는 내부에 정적 리스트 개체를 가지고 있는데
<EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڷᰡ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ȵDZ<C8B5> <20><><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>. */ 여기에 쓸데없는 자료가 남겨져서는 안되기 때문이다. */
AR_Functor ////////////////////////////////////// AR_Functor //////////////////////////////////////
( (
@ -647,7 +647,7 @@ namespace ZNsMain
// <EFBFBD>ܹ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E1B8AE>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>. // 단방향 연결리스트에 대한 정렬 클래스이다.
template<typename TTypObjList> class ZtCSortSimList template<typename TTypObjList> class ZtCSortSimList
{ {
@ -698,8 +698,8 @@ namespace ZNsMain
/* SwapLinkPtr(APA_LinkPtrArr[AL_FirstIndex],APA_LinkPtrArr[j]); /* SwapLinkPtr(APA_LinkPtrArr[AL_FirstIndex],APA_LinkPtrArr[j]);
<EFBFBD><EFBFBD> <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ʒ<EFBFBD>ó<EFBFBD><C3B3> 2 <20>ٷ<EFBFBD> <20><><EFBFBD>°<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 위 코드 보다 아래처럼 2 줄로 쓰는게 별도의 스택 변수를 사용하지
<EFBFBD>ʾƼ<EFBFBD> <20><><EFBFBD><EFBFBD>. 않아서 좋다.
*/ */
APA_LinkPtrArr[AL_FirstIndex]=APA_LinkPtrArr[j]; APA_LinkPtrArr[AL_FirstIndex]=APA_LinkPtrArr[j];
APA_LinkPtrArr[j ]=VP_PivotLinkPtr ; APA_LinkPtrArr[j ]=VP_PivotLinkPtr ;
@ -760,13 +760,13 @@ 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 <EFBFBD><EFBFBD> <20><>ȯ 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_) // <EFBFBD>Ʒ<EFBFBD> <20>ڵ常 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. #if(_CODE_OLD_) // 아래 코드만 빠진다.
ZCLink::MakeCircle(VPP_LinkPtrArr[0], VPP_LinkPtrArr[VL_SortSize-1]); ZCLink::MakeCircle(VPP_LinkPtrArr[0], VPP_LinkPtrArr[VL_SortSize-1]);
#else #else
ARR_CObjList.mp_HeadLink=VPP_LinkPtrArr[0] ; ARR_CObjList.mp_HeadLink=VPP_LinkPtrArr[0] ;