etc..
스터디#1 _ 버블 정렬
Joyfullyever
2025. 1. 4. 19:32
#1 버블 정렬
: 회차마다 각 자리를 서로 비교한 후, 가장 큰 수를 맨 뒤로 보내는 방법
: 비교 회차마다 가장 큰 수가 위치한 맨 끝의 수는 비교 대상에서 제외
: 회차를 반복시키면서 비교 대상이 사라질 때까지 정렬
#2 버블 정렬 기본식
// 가장 마지막 값은 어차피 큰 수로 저장되기 때문에, 배열의 길이 - 1 번의 회차만큼 반복
for (int i = 0; i < arr.length - 1; i++) {
// 교환을 할때마다 가장 마지막 자리의 값은 가장 큰 값이기 때문에,
// 비교대상이 없어 배열의 길이 - 1 - 회차의 수 만큼 반복
for (int j = 0; j < arr.length - i - 1; j++) {
// 교환 알고리즘
// 만약 앞에 저장된 수가 뒤의 수보다 크다면 서로의 자리를 교환
if (arr[j] > arr[j + 1]) {
// 앞의 수가 더 크기에, 임시 저장 변수에 저장
int temp = arr[j];
// 뒤의 수를 앞의 공간에 저장
arr[j] = arr[j + 1];
// 임시 저장 변수에 저장해둔 더 큰 수를, 뒤의 공간에 저장
arr[j + 1] = temp;
}
}
}
#3 스터디 문제
문자형인 알파벳을 char 타입의 배열에 저장하고, 알파벳 순서에 맞추어 배열을 정렬하기
#4 문제 풀이
알파벳을 정렬하기 전, 아스키코드를 통하여 각 알파벳에 해당하는 숫자를 이해
컴퓨터는 사람과 다르게 알파벳 그대로를 이해하는게 아닌, 숫자로 변환하여 인식을 하며 각자의 고유번호를 가지고 있음
아스키코드 표에 따라 배열을 순서대로 정렬이 가능
A~Z까지 아스키코드 표
알파벳 | A | B | C | D | ... | W | X | Y | Z |
10진수 | 65 | 66 | 67 | 68 | ... | 87 | 88 | 89 | 89 |
이와 같이 각각의 문자로 비교를 하여 크기 비교를 하는 방법이 아닌, 알파벳들을 10진수의 값으로 전환하여 크기 변화를 시킨 후,
오름차순으로 알파벳을 순서대로 정렬
// 알파벳은 문자형이기에 char 타입으로 배열타입을 지정하고 저장
char [] arr = {'Z', 'A', 'C', 'B', 'Y', 'X', 'E', 'D', 'F'};
// 배열의 길이는 9, 모든 값의 자리를 찾기 위해서 8번을 반복하기 위해 '배열의 길이 - 1'
for (int i = 0; i < arr.length - 1; i++) {
// 각 회차의 마지막 값은 이미 해당 회차의 최댓값 이기 때문에 제외
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) { // 알파벳 순서 비교
// 두 알파벳의 자리를 교환하는 교환 알고리즘
// 배열의 자리에 저장된 값 또한 char 타입의 값이기 때문에,
// 임시 저장 변수명 또한 char값으로 선언
char temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
문제 출력 값
// 정렬 전
{Z, A, C, B, Y, X, E, D, F}
// 정렬 후
{A, B, C, D, E, F, X, Y, Z}