. Java
[Practice] Chap05 배열 : 선택정렬 오름차순으로 정렬하라.
박인영
2021. 7. 14. 20:59
아래의 배열을 선택 정렬 오름차순으로 정렬하라.
int[] numArr = new int[] { 1, 4, 3, 5, 2 };
▼ 나의 풀이
for (int i = 0; i < numArr.length; i++) {
int[] tmpArr = new int[numArr.length-i];
System.arraycopy(numArr, 0+i, tmpArr, 0, numArr.length-i); // --- ①
int min = tmpArr[i-i];
for (int j = 0; j < tmpArr.length; j++) {
if(tmpArr[j] < min) {
min = tmpArr[j];
int tmp = tmpArr[0];
tmpArr[0] = tmpArr[j];
tmpArr[j] = tmp;
System.arraycopy(tmpArr, 0, numArr, i, tmpArr.length); // --- ②
}
}
}
i = 1일때 ,
i = 0에서 정렬한 0번 요소를 제외하고
최소값을 찾는 방법을 도저히 생각하지 못해
① 배열 복사를 이용하여 배열의 크기를 줄여
최소값을 찾는 범위를 줄였다.
최소값을 찾아 크기를 줄인 배열의 0번에 저장하고
② 그 값을 다시 원래의 배열에 복사했다.
▼ 선생님 조언
for (int i = 0; i < numArr.length-1; i++) {
int minPos = i;
for (int j = i + 1; j < numArr.length; j++) {
if(numArr[minPos] > numArr[j]) {
minPos = j;
}
}
int tmp = numArr[i];
numArr[i] = numArr[minPos];
numArr[minPos] = tmp;
}
- for문의 초기식을 j = i + 1로 하면
다음값과 비교하기 때문에
이전 회차에서 정렬된 값을 제외할 수 있다.
(이렇게 간단할 수가..)