버블 정렬 :
수면으로 올라오는 거품같이 정렬하는 것을 말한다
정렬 결과는 이전 삽입 정렬과 같다
1. 배열의 끝에서 처음까지 이웃 사이의 요소를 비교하여 작은 값이 앞으로
오도록 요소를 교체
2.이를 반복하여 배열의 시작 부분에 가장 작은 값을 갖는 요소가 위치하게 만든다
3. 그 다음 나머지 요소에 대해 같은 과정을 거치며 두 번째로 작은 요소가 위치한다
4.이 같은 절차를 반복하여 배열 전체를 정렬한다
class Arraysort{
public static void printArray(int[] a){
for (int i = 0; i < a.length; i++) {
System.out.print(" [" + a[i]+ "] ");
}
System.out.println();
}
}
public class Practice {
public static void main(String[] args) {
int[] a = {90, 34, 78, 12, 56};
System.out.println("정렬 전 배열");
Arraysort.printArray(a);
int ins, cmp, temp;
for(ins = 0; ins < a.length -1; ins++){
for (cmp = 0; cmp < a.length - ins - 1; cmp++) {
if (a[cmp] > a[cmp + 1]){
temp = a[cmp];
a[cmp] = a[cmp + 1];
a[cmp + 1] = temp;
}
}
}
Arraysort.printArray(a);
내가 가장 헷갈렸던 부분 :
a.length - 1 : a.length가 아닌 a.length - 1을 사용하는 이유
버블 정렬에서 n개의 요소를 정렬할 때 마지막 요소는 자동으로 정렬된 상태가 되므로
외부 루프(ins)가 a.length - 1까지만 실행이 되면 된다.
5 - ins - 1
버블 정렬의 특성상 한 번 외부 루프(ins)가 끝이나면
배열의 가장 큰 요소가 배열의 끝으로 이동하게 된다
- a.length - 1: 외부 루프가 배열의 마지막 요소까지 반복하지 않도록 제한합니다. 이는 마지막 요소가 자동으로 정렬되기 때문입니다.
- 5 - ins - 1: 내부 루프의 비교 범위를 점점 줄여 나가면서, 이미 정렬된 부분을 다시 비교하지 않도록 합니다.