template< class T >
auto sorted_merge( const T* a1, const int size1, const T* a2, const int size2, T* result )
{
auto head = (T*)a1;
auto ohead = (T*)a2;
auto otail = (T*)a1 + size1;
auto tail = (T*)a2 + size2;
auto limit = otail;
if( a1[ 0 ] > a2[ 0 ] )
{
std::swap( head, ohead );
limit = tail;
}
if( a1[ size1 - 1 ] > a2[ size2 - 1 ] )
std::swap( tail, otail );
while( head < limit && *head < *ohead )
*result++ = *head++;
if( limit == tail )
std::swap( head, ohead );
while( head < otail )
*result++ = *head <= *ohead ? *head++ : *ohead++;
while( ohead < tail )
*result++ = *ohead++;
return result;
}
루프 내 조건 비교가 최대 2개 존재하게 했다능.
참고.
이것이 머지소트
의 알맹이쥬 ㅋㅋ
하나만큼 배열의 여백이 더 있다면, 원본 보관, 종료조건 강제로 조건문 하나씩으로 줄일수 있음유~
아마 stl::sort 가 머지를 쓰더라도 이걸 마개조해서 쓰면 이거보다 빠르지 않을듯
ㅇㅇ 아래 글에 적어놨음유.
정렬되어 있나 테스트도 하는듯도.
으 어려워
이따 낮에 시도 해봐야겠네여
ㅇㅇ 일단 주소들이 오름차순 혹은 내림차순 그룹들의 합일텐데... 특성 파악하는게 중요하겠쥬~
배열의 여백 크으...
아 소트는 진짜 고민이네여
가만히 기다리다 공짜성능 향상을 맛볼것인가 고칠 것인가 ㅋㅋ
리스트를 배열로 바꿀때 하나 큰 배열에 넣어놓고
이 함수 들어올때 부분 크기를 받았을테니 뒷값을 보관해야겠죠
그리고 부분크기 젤뒤에 저 조건을 줄일 수 있는 임의 값을 넣어서 맞추기.
그런뒤 빠져나가기 전에 원래 보관된 값을 넣어주면 오키.
셈이콜론//갯수->개수 (개수 (個數)[명사] : 한 개씩 낱으로 셀 수 있는 물건의 수효.) [리듬 맞춤법 봇♬]
대신 그렇게 하면 인터리빙 해야 해서 좀 손해려나. 뭐 방법은 많을듯.
+1 하나 그거 좋네여