버블정렬
버블 정렬은 arr[i]와 그 다음 값인 arr[i + 1]을 비교하기 때문에 for문의 조건식을 배열길이 -1 로 해주어야 한다.
i가 배열길이만큼 돌게 되면 i + 1은 존재하지 않는 값이기 때문에 오류가 발생하게 된다.
int[] arr = {7, 2, 3, 9, 28, 1};
for (int i = 0; i < arr.length - 1; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
System.out.println(Arrays.toString(arr));
}
위 코드 실행 시 정렬이 완벽하게 되지 않음을 확인할 수 있다.
왜냐하면 i와 i + 1 인접한 두 값만 서로 비교하기 때문에 포문이 다 돌아가고 나면
최대값인 가장 오른쪽 값 하나만 정렬된다.
그래서 전체적으로 정렬이 되기 위해선 for문을 한번 더 돌려줘야 한다.
int[] arr = {7, 2, 3, 9, 28, 1};
for (int j = 0; j < arr.length - 1; j++) {
for (int i = 0; i < arr.length - 1; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
위처럼 중첩 for문을 사용하면 전체적으로 정렬이 되어 출력된다.
여기서 더 개선할 점은 for(i)가 한번 실행될 때마다 가장 큰 값이 하나씩 정렬되는데
위 코드는 이미 정렬된 값까지 중복하여 검사를 한다.
이를 수정하면
import java.util.Arrays;
public class BubbleSort01 {
public static void main(String[] args) {
int[] arr = {7, 28, 2, 3, 9, 1};
for (int j = 1; j <= arr.length; j++) {
for (int i = 0; i < arr.length - j; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
이와 같이 작성할 수 있다.
이렇게하면 for(i)가 한번 돌 때마다 정렬된 값은 제외하고 검사하게 된다.
버블정렬 : OOP 적용
import java.util.Arrays;
public class BubbleSort02 {
public int[] sortARound(int[] arr, int until) {
for (int i = 0; i < until; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
return arr;
}
public int[] sort(int[] arr) {
for (int j = 1; j <= arr.length; j++) {
arr = sortARound(arr, arr.length - j);
}
return arr;
}
public static void main(String[] args) {
BubbleSort02 bubbleSort02 = new BubbleSort02();
int[] arr = {7, 28, 2, 3, 9, 1};
arr= bubbleSort02.sort(arr);
System.out.println(Arrays.toString(arr));
}
}
OOP를 적용한 버블정렬 코드이다.
인접한 두 값을 비교하는 부분을 sortARound( )로 분리하고
인접한 두 값 비교를 배열 길이만큼 반복하는 부분을 sort( )로 분리하였다.
버블정렬 2
public class BubbleSort2 {
public int[] sort(int[] arr, int num) {
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (num == 0) {
if (arr[i] > arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
} else if (num == 1) {
if (arr[i] < arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
return arr;
}
public static void main(String[] args) {
BubbleSort2 bubbleSort2 = new BubbleSort2();
int[] arr = {7, 2, 3, 9, 28, 1};
arr = bubbleSort2.sort(arr, 0);
System.out.println(Arrays.toString(arr));
}
}
얘는 다른 방법으로 버블정렬을 하는 코드이다.
첫번째 인덱스 값을 기준으로
1번과 2번, 1번과 3번, 1번과 4번,,, 을 비교하는 식으로 버블정렬을 진행한다.
이 코드는 기능이 하나 추가되었는데
메소드 호출 시 두번째 인자값으로 0이 전달되면 오름차순, 1이 전달되면 내림차순으로 정렬한다.
EC2
ec2 인스턴스 시작 후 git bash에서 ssh로 접속을 시도하는데 permission denied 오류가 발생했다.
처음엔 pem 파일이 존재하는 경로를 잘못 설정해서 no such directory or file 오류가 발생했는데
경로를 제대로 설정하고 난 뒤에는 권한 오류가 자꾸 났다.
그래서 chmod 명령을 통해 권한을 변경한 뒤 다시 시도하였더니 해결되었다.
Docker
docker로 mysql을 띄운 뒤 mysql workbench에서도 permisison denied 오류가 발생하였다...
권한 오류는 아니고 워크벤치에서 커넥트할 때 비밀번호를 잘못 입력해서 발생한 오류였는데
도커에서 mysql을 띄울 때 분명히 패스워드를 password로 설정했는데
혹시나하고 12345678을 입력하니 연결이 되었다..
근데 지금 보니까 mysql이 2개가 띄워져 있었던 것 같다 ㅋㅋ
port is already allocated
어이없네..
'멋쟁이 사자처럼 > TIL' 카테고리의 다른 글
230517 5주 3일차 TIL. 스택, DB (3) | 2023.05.17 |
---|---|
230516 5주 2일차 TIL. 선택정렬, 삽입정렬 (1) | 2023.05.16 |
230511 4주 4일차 TIL. List, ArrayList (1) | 2023.05.11 |
230508 4주 1일차 TIL. 입력 받은 높이만큼 피라미드 출력 (2) | 2023.05.09 |
230503 3주 3일차 TIL. Codeup 1274, 프로그래머스 소인수분해 (0) | 2023.05.03 |