26년1학기/알고리즘

알고리즘 )1주차 퀴즈 준비_코드( 26.3.21)

kimchangmin02 2026. 3. 21. 22:51

 

 

성능개선방법[  ]

 

 


 

 

 

선택정렬

  1. 인덱스 보관 (min): exch를 하기 위해서는 최솟값의 **값(maxValue)**이 아니라 최솟값이 위치한 **인덱스(min)**를 알아야 합니다.
  2. 내부 반복문 범위: j를 외부로 빼서 사용하면 반복문 종료 시 j는 항상 a.length가 되어 ArrayIndexOutOfBoundsException이 발생합니다. 따라서 별도의 변수 min에 인덱스를 저장해야 합니다.
  3. 정렬 로직: 오름차순 정렬이므로 maxValue가 아닌 가장 작은 값을 찾는 min 로직을 사용합니다.
  4. 외부 반복문 범위: 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문돌아서 복사하는 과정 거치면 되는건가
    //기수정렬처럼
}