. 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로 하면

  다음값과 비교하기 때문에 

  이전 회차에서 정렬된 값을 제외할 수 있다.

  (이렇게 간단할 수가..)