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}