개발자의 오르막

알고리즘 - 선택정렬 본문

Algorithm

알고리즘 - 선택정렬

계단 2019. 9. 12. 15:09

# 알고리즘이란?

- 알고리즘은 입력, 출력, 유한성, 명백성, 효과성을 만족해야 합니다.

- 알고리즘은 분석을 통해 좋고 나쁨을 평가할 수 있습니다.

- 알고리즘은 기초 프로그래밍과 자료구조를 공부한 이후에 배우면 좋습니다.

- 알고리즘은 논리이며 수학이고 실질적인 개발에 적용되는 기초적인 아이디어입니다.

 

# 대표유형

- 파싱, 해싱, 정렬, 시뮬레이션                   / 구현

- 탐색(BFS/DFS), 완전탐색(백트래킹)           / 탐색

- 자료구조(스택, 큐, 힙 등),                       / 구조

- Greedy, DP, 이분탐색                            / 알고리즘

 

# 선택정렬이란?

즉, 선택 정렬은 첫 번째 자료를 두 번째 자료부터 차례대로 비교하여 가장 작은 값을

찾아 첫 번째에 놓고, 계속해서 차례대로 비교하여 반복하는 정렬을 수행

빨 간색이 값 비교 중, 노란 색이 순서 확정

 

- 문제

다음의 숫자들을 오름차순으로 정렬하는 프로그램을 작성하세요.
1 10 5 8 7 6 4 3 2 9

 

- 풀이

 

public List<Integer> solution(int[] d) {
	      List<Integer> answer = new ArrayList<Integer>();
	      
	      for(int i=0; i<d.length; i++) {
	    	  answer.add(d[i]);
	      }
	      
	      Collections.sort(answer);
	      
	      return answer;
	  }
	
	public int[] solution2(int[] d){
		int temp = 0;		
		
		for(int i=0; i<d.length-1; i++) {

			for(int j=i+1; j<d.length; j++) {
				temp = 0;
				if(d[i] > d[j]) {
					temp = d[i];
					d[i] = d[j];
					d[j] = temp;
				}
			}
			
			
		}
		
		return d;
	}
	
	public int[] solution3(int[] d){
		int temp; int index = 0;
		int min;
		
		for(int i=0; i<d.length; i++) {
			min = 9999;
			for(int j=i; j<d.length; j++) {
				
				if(min > d[j]) {
					min = d[j];
					index = j;		
				}
			}
			temp = d[i];
			d[i] = d[index];
			d[index] = temp;
			
		}
		
		return d;
	}
	
	
	public static void main(String[] args) {
		Nadongbin1 su = new Nadongbin1();
		int[] d = {1,10,5,2,7,6,4,5,2,3};
//		List<Integer> answer = su.solution(d);
//		for(int i=0; i<answer.size(); i++) {
//			System.out.print(answer.get(i));
//		}
		
		int[] answer = su.solution3(d);
		for(int i=0; i<answer.length; i++) {
			System.out.print(answer[i]);
		}

	}

 

 

 

Comments