C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[429] [참고](수정) StringGrid에서 Sort를 해 보았습니다.
박영목 [conan67] 8968 읽음    2004-04-14 20:57
반갑습니다....  부산 DT&C 박영목 입니다...

조금 오래 전  TC나 볼랜드로 프로그램할 때 분명 가입했는데... 그리고 ID도 여기에 존재하고 있고...
그런데 PASSWORD 잃어버려서,,,, 사용할 수 없는데... 제 ID 살려주시면 안됩니까? gsbsoft 입니다.

이것은 QuickSort입니다... 아래의 소스는 1990년에 판매된 "C언어 데이터 구조와 알고리즘"라는
책에 나오는데 소스는 거의 동일합니다. 단지 AnsiString의 문자열 비교함수를 사용한 것 밖에
없습니다.

StringGrid에서 Sort 기능이 있는지 찾다가 없어서... 이것을 사용했습니다.

제가 사용하는 그리드는 TStringGrid 위쪽 FixedRow 한줄 있고...
컬럼은 3개 입니다.

정렬은 칼럼은 gr->Cells[0][x] 입니다. 맨 앞에 것,......

이것 혹 자주 사용할 실 분은 독립적인 루틴으로 만들어 사용하세요...  빌더 만세!!! 작년까지 델파이 만세!!! 했는데... ㅋㅋㅋ....

void strQSort( TStringGrid *gr, int left, int right )
{
  int i, j;
  AnsiString sPx, sPw;

  do
  {
    sPx = gr->Cells[0][(left+right)/2];
    i = left;    //1   <- 이것들 실험하다가 실수 했네요.... 다시 수정했습니다.
    j = right;   //RowCount-1; 이것 그대로 나두면 처음 1번 외에 다운 됩니다.
    do
    {
      while( gr->Cells[0][i].AnsiCompare( sPx ) < 0 ) i++;
      while( gr->Cells[0][j].AnsiCompare( sPx ) > 0 ) j--;

      if( i>j ) break;

      sPw = gr->Cells[0][i];  //컬럼은 3개 입니다.

      gr->Cells[0][i] = gr->Cells[0][j];   // 맨 앞 칼럼이 정렬로 바뀌니까? 다른 칼럼도 같이 이동
      gr->Cells[0][j] = sPw;

      sPw = gr->Cells[1][i];
      gr->Cells[1][i] = gr->Cells[1][j];
      gr->Cells[1][j] = sPw;

      sPw = gr->Cells[2][i];
      gr->Cells[2][i] = gr->Cells[2][j];
      gr->Cells[2][j] = sPw;

    } while( ++i <= --j );

    if( j - left < right - i )
    {
      if( left < j ) strQSort( gr, left, j );
      left = i; j = right;
    }
    else
    {
      if( i < right ) strQSort( gr, i, right );
      right = j; i = left;
    }
  } while( left < right );
}


// ImageButton 버튼은 델파이 1년하면서 자주 사용했는데... MouseUp만 빼고는 아주 좋습니다...
// 소스도 공개되어 있고... 물론 파스칼.... Builder에서 그냥 컴포넌트 등록하니까? 되네여....
// Builder 아주 멋있습니다.... VC++로 할 때는 .... 정말 삽질인데... 호호호....
// 그런데 요즘 이게 단종되면 어쩌나... 걱정입니다..... 제발 계속 UP 되어 나와야 하는데...
// 참 이 ImageButton 소스는 www.delphi.co.kr의 자료실에 있습니다.....

void __fastcall TfrmConfig::ImageButton1MouseUp(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{

  strQSort( sgTheater, 1, sgTheater->RowCount-1 );   // TStringGrid *sgTheater 입니다.

}


그럼 다음에.....

선한목자 [gsbsoft]   2004-05-04 09:38 X
임프님 제 PASSWORD 알려 주셔서 감사합니다. 메일로 하려다 바쁠 것 같아서.... 그럼...

+ -

관련 글 리스트
429 [참고](수정) StringGrid에서 Sort를 해 보았습니다. 박영목 8968 2004/04/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.