본문 바로가기
알고리즘 && 자료구조

대표적인 정렬 알고리즘(선택,버블,삽입)

by bloodFinger 2020. 1. 26.

정렬 알고리즘은 많이 공부해 봤으니 간단하게만 설명하겠습니다.

 

선택 정렬 : 기준위치에 맞는 원소를 선택하여 자리를 교환하는 방식

버블 정렬 : 양옆의 값을 비교해서 하나씩 옆으로 밀어내면서 진행

삽입 정렬 : 정렬되어 있는 부분집합에 새로운 원소의 위치를 찾아 삽입하는 정렬

 

선택 정렬

	public String solution(int[] numbers) {
        String answer = "";
        
        for(int i=0; i<numbers.length-1; i++) {
            int min = i;
            for(int j=i+1; j<numbers.length; j++) { 
                if(numbers[j] < numbers[min]) { //오름차순 
                    min = j;
                }
            }
            swap(numbers, min, i); 
            System.out.print("선택 정렬 "+ (i+1) +" 단계 : ");
            for(int v : numbers) {
                System.out.print(" " + v);
            }
            System.out.println();
        }
        return answer;
    }
    
    public  void swap(int a[], int idx1, int idx2) {
        int temp = a[idx1];
        a[idx1] = a[idx2];
        a[idx2] = temp;
    } 
    
    public static void main(String[] args) {
		int [] numbers = {3, 30, 34, 5, 9};
		
		Sort_02 s2 = new Sort_02();
		System.out.println(s2.solution(numbers));
				
	}

결과

 

버블정렬

public String solution(int[] numbers) {
        String answer = "";
        int size = numbers.length;
        
        for(int i=size-1; i>0; i--) {
            System.out.print("버블 정렬"+ (size-i) + " 단계 : ");
            for(int j=0; j<i; j++) {
                if(numbers[j] > numbers[j+1]) {
                    swap(numbers,j,j+1);
                }
                System.out.println();
                for(int v : numbers) {
                    System.out.print("  "+ v);
                }
            }
            System.out.println();
        }
        
        
        
        return answer;
    }
	
	public  void swap(int a[], int idx1, int idx2) {
        int temp = a[idx1];
        a[idx1] = a[idx2];
        a[idx2] = temp;
    }    
	
	
	public static void main(String[] args) {
		int [] numbers = {3, 30, 34, 5, 9};
		
		Sort_02 s2 = new Sort_02();
		System.out.println(s2.solution(numbers));
				
	}

 

결과창

 

삽입정렬 

public String solution(int[] numbers) {
        String answer = "";
        
        int size = numbers.length;        
        for(int i=1; i<size; i++) {
            int temp = numbers[i];
            int j = i;
            while((j>0) && (numbers[j-1]>temp)) {
            	numbers[j] = numbers[j-1];
                j--;
            }
            
            numbers[j] = temp;
            System.out.print("삽입정렬 " + i + "단계 : ");
            for(int v : numbers) {
                System.out.print("  " + v);
            } 
            System.out.println();
        }
        
        
        
        
        return answer;
    }
	
	public  void swap(int a[], int idx1, int idx2) {
        int temp = a[idx1];
        a[idx1] = a[idx2];
        a[idx2] = temp;
    }    
	
	
	public static void main(String[] args) {
		int [] numbers = {3, 30, 34, 5, 9};
		
		Sort_02 s2 = new Sort_02();
		System.out.println(s2.solution(numbers));
				
	}

 

결과창