반갑습니다.... 부산 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 입니다.
}
그럼 다음에.....
|