-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
이해안가는 부분 질문있습니다
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
안소
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
유튜브에 정렬을 시각적으로 표현한 영상 많으니 한번 참고해보시길 바래요
답변 1