성능개선방법[ ]
선택정렬
- 인덱스 보관 (min): exch를 하기 위해서는 최솟값의 **값(maxValue)**이 아니라 최솟값이 위치한 **인덱스(min)**를 알아야 합니다.
- 내부 반복문 범위: j를 외부로 빼서 사용하면 반복문 종료 시 j는 항상 a.length가 되어 ArrayIndexOutOfBoundsException이 발생합니다. 따라서 별도의 변수 min에 인덱스를 저장해야 합니다.
- 정렬 로직: 오름차순 정렬이므로 maxValue가 아닌 가장 작은 값을 찾는 min 로직을 사용합니다.
- 외부 반복문 범위: i < n - 1인 이유는 마지막 원소는 자동으로 정렬되기 때문입니다. (i < n으로 해도 결과는 같습니다.)
- int j = i + 1; 자체는 괜찮습니다. i가 a.length - 2까지만 가기 때문에 j는 마지막 인덱스인 a.length - 1에서 시작하게 되어 안전합니다.
- 진짜 문제는 exch(a, i, j);입니다.
- 내부 for 루프가 ; j < a.length; j++ 조건으로 끝까지 돌고 나면, 루프를 빠져나온 시점의 j 값은 **항상 a.length**가 됩니다.
오름차순인지, 내림차순인지에따라 최솟값인지, 최댓값인지
- 방법 B (오름차순 정렬 - 뒤에서부터): 가장 큰 값을 찾아서 **맨 뒤(마지막 인덱스)**부터 채우면 오름차순 정렬이 됩니다. 하지만 보통 선택 정렬은 구현의 편의상 0번 인덱스부터 채우는 방식을 선호합니다.
for (int i = 0; i < a.length-1; i++) {
int minIndex=i;
//j=i+1해도 i는 a.length-2가 마지막이니깐 ㄱㅊ
for (int j = i+1; j < a.length-1; j++) {
//대신이떄는 끝까지 돌아야하나
//j로 교환하는게 아니라, minIndex로 교환하니깐, 내부반복문에서 교환을 안해도되ㅏ네
}
exch(a,i,minIndex);
삽입정렬
❌ 틀린 부분: less(a[j], a[i])
내 바로 옆이랑 비교해야지
i는 지금 루프에서 위치이동할 녀석이고
h/=3;
서순헷갈리면
a+=3
계수.기수정렬
return B;
//A랑 B랑 다르기때문 <기수정렬에서는 왜 A를 그대로 줫던거지
//복사하는 과정이 있었던가
//여기서도 리턴없이 할려면 for문돌아서 복사하는 과정 거치면 되는건가
//기수정렬처럼
}
'26년1학기 > 알고리즘' 카테고리의 다른 글
| 알고리즘) bst 삭제, rank,select 메소드등 (1) | 2026.03.23 |
|---|---|
| 알고리즘 )1주차 퀴즈 준비( 26.3.22) (1) | 2026.03.22 |
| 알고리즘 )1주차 퀴즈 준비_( 26.3.21) (0) | 2026.03.21 |
| 알고리즘 )1주차 이론 etc..( 26.3.20) (0) | 2026.03.20 |
| 알고리즘 )1주차 퀴즈 준비_코드( 26.3.20) (0) | 2026.03.20 |