sort 5

c의 qsort와 stl의 sort에서 비교 함수(또는 함수객체) 사용시 결과값 세팅 주의

오름차순 정렬하면 앞에는 작은 것, 뒤에는 큰 게 온다. 갈수록 오른다고 생각하면 된다. ex) 0, 1, 7, 31, 55, 77, 999 김연아, 네이버, 다음, 라이코스, 마라도나, 메시, 박지성, 사오정, 애플, 잡스, 차범근, 카카, 태연, 펠레, 호날두, 홍명보 1. c qsort에서 비교함수 사용시 오름차순 정렬 int Compare(const void *a, const void *b) { return _tcsicmp(((PERSON *)a)->szName, ((PERSON *)b)->szName); } qsort(pPerson, count, sizeof(PERSON), Compare); 참고로 포인터의 연산자 순위가 형변환보다 높다. 위에서 형변환 먼저 처리하려면 필히 괄호를 써줘야 된다...

C, C++ 문법 2012.10.22

병합정렬(Merge Sort) 분석과 소스 작성해 보기

이 알고리즘 역시 이해는 어렵지 않다. 트리구조로 파악 후 하위트리들을 작은수를 앞에 놓는 식으로 차례차례 상위로 이동하면서 병합하는 방식이다. 그런데 이해는 쉽게 되는데 선뜻 코드가 바로 짜여지지 않는다. 아무래도 트리구조로 탐색, 이동해야 되니 이동방식에 대한 고민이 만만찮고 배열 갯수가 2의 제곱으로 나누어지지 않는 부분에 대한 처리도 신경써야 되기 때문일 것이다. 여기저기 참고하고, 손질 좀 하고 시간 좀 걸려 짜 놓은 소스를 보니 참 길고 루프문도 많이 사용됨을 볼 수 있었다. 사용된 지역변수가 11개나 된다. 원래 각 트리 단계별로 보통 버퍼에 결과를 저장한 후 다시 원본배열로 이를 복사하는 방식을 사용하기도 하지만 이를 개선하는 방법도 있다.(이재규 알고리즘 서적 참조) 어차피 버퍼와 원본배..

힙정렬(Heap Sort) - topdown, bottomup 두 방식 소스 작성과 비교 등등 해봄

생각보다 코딩 작업이 더디었다. 개념은 이해하기 쉬운 데 막상 코딩을 할려니 이것저것 세밀하게 따져야 하는 부분이 상당수 있어서 그런듯 하다... 시작과 끝 인덱스라든지, 노드 공식, 갯수 파악 등 신경써서 해야하는 부분이 많으므로 시간이 좀 오래 걸렸다. 일부 알고리즘 서적이나 강의에서 계산의 편의로 실제 인덱스에 +1을 하고 작성하는 경우가 있는 데(이재규 알고리즘 참조) 굳이 그렇게 하지 않고 그냥 작성했다. 충분히 직관적으로 쉽게 파악가능하고 어차피 나중에 실제 요소값 바꿀 때는 원래의 인덱스를 취해야 하므로 그렇다. 인트형 무작위 100만개를 입력해 테스트해보았는데 책에서 나오는대로 bottomup방식이 쬐금 더 빨랐다....;;; 퀵소트랑 비교해봣는데 역시 퀵소트한테는 못당한다.... medi..

Intro Sort(Introspective Sort),,, 다큐먼트

위키디피아에서 두 링크가 있는데, 하나는 Intro Sort 고안한 사람의 발표 논문이고 다른 하나는 아래의 자료인 데 대학교 연구자료인 듯 하다. ralph unden .net home bio flickr twitter misc A guide to Introsort My university, BA Stuttgart, has every IT student do a student research project spanning over the 5th and 6th semester. I applied for a topic that is close to basic informatics. The topic I chose and luckily was assigned to, is the implementation a..

리스트뷰 아이템 스왑, 이동, 정렬 관련 API 소스

// 컬럼 수는 외부에서 입력한다. 이 함수는 빈번하게 사용하므로 Header_GetItemCount 호출은 낭비. void __stdcall ListItemSwap(HWND hList, int One, int Two, int iColCount) { // 텍스트 제외 속성 교환 LVITEM liOne={0}, liTwo={0}; liOne.mask = liTwo.mask = LVIF_IMAGE | LVIF_PARAM | LVIF_STATE; liOne.stateMask = liTwo.stateMask = LVIS_CUT | LVIS_DROPHILITED | LVIS_FOCUSED | LVIS_SELECTED | LVIS_OVERLAYMASK | LVIS_STATEIMAGEMASK; liOne.iSubIt..

API 2009.09.03