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

C++빌더 Q&A
C++Builder Programming Q&A
[49504] Re:StringGrid에서 sort기능을 구현하고 싶습니다.
김태정 [taesys] 1563 읽음    2007-06-01 13:35
구태여 퀵소트를 쓸 필요가 없다면...간단히 아래와 같이 구현할 수 있겠죠

여기서 NG는 숫자가 들어가는 StringGrid이고,
Column은 하나만 있고, 그리드 내에는 공란이나 숫자만 들어간다는 가정하에
버블소트를 한 것입니다.

아래 소스를 보시고 C++Builder에서 어떻게 데이터를 어떻게 처리하는지
이해하시면 간단히 퀵소트 소스도 변환이 가능하겠지요...

그리고 숫자가 아닌 스트링 데이터의 경우는 어떻게 비교할지에 대한 원칙을
세우셔야  할것입니다.

//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    int i, j;
    AnsiString tc;

    for (i=0;i<NG->RowCount-1;i++){
        if (NG->Cells[0][i]=="") continue;

        for(j=i+1;j<NG->RowCount;j++){
           if (NG->Cells[0][j]=="") continue;
           if (StrToInt(NG->Cells[0][i])>StrToInt(NG->Cells[0][j])){
              tc=NG->Cells[0][i];
              NG->Cells[0][i]=NG->Cells[0][j];
              NG->Cells[0][j]=tc;
           }
        }
    }
}
//---------------------------------------------------------------------------



------------------------------------------------------------
나쁜토끼 님이 쓰신 글 :
: 먼저
: Form1에다가 TstringGrid를 만들고 숫자를 적을 수 있도록 editing을 true로 했습니다.
:
: 기본적으로
: ┌─┐<--StringGrid1
: │ 1│
: │ 4│            ┌───────┐<--Button1
: │ 5│            │ 오름차순정렬│
: │ 3│            └───────┘
: │ 2│
: └─┘
: 라고 적고,     오름차순정렬 버튼을 누르면
: 숫자들이
: ┌─┐
: │ 1│
: │ 2│            ┌───────┐
: │ 3│            │ 오름차순정렬│
: │ 4│            └───────┘
: │ 5│
: └─┘
: 이렇게  정렬이 되도록 하려고 합니다.
:
: ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
:                                                                참조한 소스내용
: http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=429
: ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
: 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 );
:
:
: }
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
:
:   strQSort( sgTheater, 1, sgTheater->RowCount-1 );
:     // TStringGrid *sgTheater 입니다.
:
: }
: //---------------------------------------------------------------------------
: ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
: 여기에서
: 1> TstringGrid에 숫자를 적으면 어떻게 컴퓨터가 저장을 하고 있으며...
: (editbox의 경우는 Edit1->Text에 저장하고 있듯이...)
:
: 2> 위의 소스가 맞는지 (맞다면 h파일이나 기본 cpp가 아닌곳에 무엇을 정의 해줘야하는지 알려주시면 감사하겠습니다.)
:
: 혹시 제가 하려고하는 것과 비슷한 샘플을 가지고 계시거나, 보셨다면 리플로 적어주세요.
: 많은 도움 부탁드립니다.

+ -

관련 글 리스트
49465 StringGrid에서 sort기능을 구현하고 싶습니다. 나쁜토끼 1265 2007/05/30
49504     Re:StringGrid에서 sort기능을 구현하고 싶습니다. 김태정 1563 2007/06/01
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.