Javad에서 숫자를 sorting하는 것보다, String을 sorting하는 경우에는 typecasting에 대해 신경을 더 써야한다.
public static char [] sortString( char [] in, int low, int high ) {
if( low>high )
return in;
int pivotPos = low + (high-low)/2;
char pivot = in[pivotPos];
int lowCnt = low;
int highCnt = high;
/*
* Pivot 문자를 맨 뒤의 문자와 교환한다.
* 중복 문자가 입력된 경우를 대비
* 문자 치환을 위해 Exclusive-OR를 이용하고, 그 결과를 Typecasting한다.
*/
in[high] = (char)(in[high] ^ in[pivotPos]);
in[pivotPos] = (char)(in[high] ^ in[pivotPos]);
in[high] = (char)(in[high] ^ in[pivotPos]);
while( lowCnt
/*
* Low index에서부터 1씩 증가하며, Pivot 문자보다 뒷 순서의 문자를 찾는다.
*/
while( in[lowCnt]
lowCnt++;
while( in[highCnt]>=pivot && lowCnt
highCnt--;
/*
* High index에서부터 1씩 감소시키며, Pivot 문자보다 앞 순서의 문자를 찾는다.
*/
/*
* 찾은 문자를 교환한다.
*/
if( lowCnt
in[lowCnt] = (char)(in[lowCnt] ^ in[highCnt]);
in[highCnt] = (char)(in[lowCnt] ^ in[highCnt]);
in[lowCnt] = (char)(in[lowCnt] ^ in[highCnt]);
if( (lowCnt+1)
lowCnt++;
if( (highCnt-1)>low )
highCnt--;
}
}
/*
* PLow Counter의 문자와 맨 뒤 문자를 비교하여, .
* 맨 뒤에 나중 순서의 문자를 배치한다.
* 중복 문자가 입력된 경우를 대비
*/
if( in[lowCnt]>in[high]) {
in[lowCnt] = (char)(in[lowCnt] ^ in[high]);
in[high] = (char)(in[lowCnt] ^ in[high]);
in[lowCnt] = (char)(in[lowCnt] ^ in[high]);
}
if( (lowCnt-1)>low )
in = sortString( in, low, lowCnt-1 );
if( (highCnt+1)
in = sortString( in, highCnt+1, high );
return in;
}
public static String sortString( String in ) {
int high = in.length();
int low = 0;
char [] out = new char [high];
/*
* toCharArray()를 이용하여 String을 char array로 복사
*/
out = in.toCharArray();
out = sortString( out, 0, high-1 );
/*
* copyValueOf()를 이용하여 char array의 값을 String으로 복사
*/
return in.copyValueOf(out);
}
댓글 없음:
댓글 쓰기