문자열(String)은 불변(immutable)한 문자 시퀀스를 나타내는 객체로, 한 번 생성되면 그 내용을 변경할 수 없습니다. 자바에서는 java.lang.String 클래스를 통해 문자열 객체를 생성할 수 있습니다.
일반적으로 문자열을 정렬할 때는 Arrays.sort() 같은 유틸리티 메서드를 활용하지만, 아래 예제에서는 이러한 사전 정의된 정렬 메서드에 의존하지 않고 중첩 반복문과 문자 비교·교환(swap) 로직만으로 문자열의 문자들을 오름차순으로 정렬합니다.
정렬 원리
이 방식은 버블 정렬(bubble sort)과 유사한 원리로 동작합니다. 문자열을 문자 배열(char[])로 변환한 뒤, 문자들을 서로 비교하여 더 큰 문자를 뒤로 보내는 교환 작업을 반복하면 최종적으로 모든 문자가 알파벳 순서대로 배치됩니다.
예제 코드
public class SortStringWithoutPredefinedMethodsTest {
public static void main(String[] args) {
String str = "jdkoepacmbtr";
System.out.println("Before Sorting:" + str);
int j = 0;
char temp = 0;
char[] chars = str.toCharArray();
for(int i=0; i < chars.length; i++) {
for(j=0; j < chars.length; j++) {
if(chars[j] > chars[i]) {
temp = chars[i];
chars[i] = chars[j];
chars[j] = temp;
}
}
}
System.out.println("After Sorting:");
for(int k=0; k < chars.length; k++) {
System.out.println(chars[k]);
}
}
}실행 결과
Before Sorting: jdkoepacmbtr
After Sorting:
a
b
c
d
e
j
k
m
o
p
r
t
코드 설명
- toCharArray(): 문자열을 문자 배열로 변환해 개별 문자에 접근할 수 있도록 합니다.
- 중첩 for 루프: 배열 내 모든 문자 쌍을 반복적으로 비교합니다.
- 조건문과 교환(swap): 앞의 문자가 뒤의 문자보다 크면 두 문자의 위치를 맞바꿔 오름차순을 만듭니다.
- temp 변수: 교환 과정에서 값을 임시로 저장하는 역할을 합니다.
이처럼 기본적인 반복문과 조건문만 활용하면 별도의 정렬 API 없이도 문자열을 손쉽게 정렬할 수 있습니다. 다만 이 방식은 시간 복잡도가 O(n²)이므로, 길이가 매우 긴 문자열을 다룰 때는 최적화된 정렬 방법을 사용하는 것이 더 효율적입니다.