[자료구조] 정렬 시도

BEHE_LIT·2020년 1월 17일
0

자료구조

목록 보기
4/14

선택정렬 구현 실패

import java.util.Arrays;

public class Exam {
	public static void main(String[] args) {
		
		int[]array2 = {5,2,3,4,1};
		int temp;
		for(int i=0; i<array2.length; i++) {
			for(int k=1; k<array2.length; k++) {
				if(array2[i]>array2[k]) {
					temp = array2[i];
					array2[i] = array2[k];
					array2[k] = temp;
				}
				
			}
			System.out.println(Arrays.toString(array2));
		}
		
	}

}

-출력-
[1, 5, 3, 4, 2][1, 2, 5, 4, 3]
[1, 5, 2, 4, 3][1, 5, 4, 2, 3]
[1, 5, 4, 3, 2]

이런 결과가 나왔다...

이게 왜 문제냐면

출력문의 두번째줄까진 정렬에 문제가 없었으나 i가 3회차 돌때부터 문제가 생겼다.
k의 인덱스 번호가 i값이 증가함에 따라 앞의 데이터는 비교하지말고 i보다 순번이 1이 높은 데이터와 비교해야하는데 k값이 고정으로 1~사이즈 까지 죄다 비교하기 때문에 앞의 데이터와 다시 비교해서 스위치 되버리는 문제가 생겼다.

for(int i=0; i<array2.length; i++) {
			for(int k=1; k<array2.length; k++) {
				if(array2[i]>array2[k+i]) {
					temp = array2[i];
					array2[i] = array2[k];
					array2[k] = temp;

이론상으로는 k값이 무조건 i값보다 1이 높아져서 순차적으로 비교하는 구조를 만들면 되겠다는 전략이 떠올랐으나 이걸 구현하고자 if문 안에 k+i를 하는 등의 방법을 적용해봤지만 설정된 k사이즈의 범위를 벗어나서 컴파일에러가 발생하는 문제가 생겼다. 범위설정에 문제가 있음을 느끼고 고쳐보고자 노력했지만..

실패했다.

정답

public class Exam {
	public static void main(String[] args) {
		
		int[]array2 = {5,2,3,4,1};
		int temp;
		for(int i=0; i<array2.length-1; i++) {
			for(int k=i+1; k<array2.length; k++) {
				if(array2[i]>array2[k]) {
					temp = array2[i];
					array2[i] = array2[k];
					array2[k] = temp;
				}
				
			}
			
		}
		for(int i=0; i<array2.length; i++) {
			System.out.println("array2["+i+"] = " + array2[i]);
		}
	}

}

정답을 알고나면 신기하기도하고 허무하다. 왜이런 생각을 못했지..라는 생각.
선배개발자들은 수백, 수만번은 하셨으리라~

profile
방랑자의 현장에 오신걸 환영합니다.

0개의 댓글