• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

이해안가는 부분 질문있습니다

21.11.17 14:34 작성 조회수 138

0

앞 강의에서 최대 최소 구할때 하나하나씩 비교하는 것이랑

이번 선택정렬에서 하나씩 비교하는 것이랑 어떻게 다른건가요?

 

for (int i = 0; i < length - 1; i++) {

for (int j = i + 1; j < length; j++) {

if (arr[i] > arr[j]) { // ? 

int temp = arr[j]; 

arr[j] = arr[i];

arr[i] = temp;

}

}

printArr(arr, length);

}

여기서 if(arr[i] > arr[j]) 하는것이 이해가 안가네요

앞선 강의에서 배열에서 최대를 구할때는 

max라는 변수를 하나 만들고 거기에 max = scores[0]; 이런식으로 하나 대입하여서

if (max < scores[i]) {

max = scores[i];

}

배열을 하나씩 비교하면서 크면 바꿔주고 이런식이라서

이번 선택정렬도 이런식으로 비교하면 될줄알아서

for (int i = 0; i < length - 1; i++) {

int small = arr[0];

for (int j = i + 1; j < length; j++) {

if(small > arr[j])

}

}

이렇게 해봤는데

아예 이상하게 나와버리네요 ㅜㅜ

답변 1

답변을 작성해보세요.

1

안소님의 프로필

안소

2021.11.17

정렬을 한다는 것은 크기 순서대로 줄 세우는게 목표라는 것이니까 

이는 곧 "내 앞에 있는게 나보다 더 크다면 나와 자리를 바꿔야한다"는 의미가 됩니다. (오름차순 정렬이라면)

if (arr[i] > arr[j]) { // ? 

int temp = arr[j]; 

arr[j] = arr[i];

arr[i] = temp;

} 

이게 저 문장을 코드로 쓴 것이구요! (j는 i보다 항상 뒤죠. for문 보면 아시겠지만 i + 1 부터 시작이니까요)

최소값 최대값 갱신할 때는 순서대로 살펴보면서

"지금까지 최대값으로 알고 있었던 것보다 더 큰 값이 등장했다면 그게 새로운 최대값"이여야겠죠?

if (max < scores[i]) {

max = scores[i];

}

이게 그런 의미의 코드인 것이구요!

 

정렬 코드를 이해하기 위해선 눈으로 직접 하나하나 정렬해나가는 과정을 확인하는 것이 최고인 것 같아요.

https://www.youtube.com/watch?v=wPSz0Wm3338

https://www.youtube.com/watch?v=yXE9kFLHSOs

https://www.youtube.com/watch?v=g-PGLbMth_g

유튜브에 정렬을 시각적으로 표현한 영상 많으니 한번 참고해보시길 바래요

감사합니다~!