정렬 알고리즘(Bubble, Insertion, Selection, Merge, Quick) Feat. Java

요즘, 프레임워크나 라이브러리에 대한 공부위주로 하다보니까 기본기가 많이 부족하다고 느껴서 정렬알고리즘을 공부하고 한 번 정리해보았다. 1. Bubble 시간복잡도 O(n²), 가장 기본적인 정렬 알고리즘. 시작 : [ 5, 2, 4, 3, 1] 1회전 : [ 2, 4, 3, 1, 5] 2회전 : [ 2, 3, 1, 4, 5] 3회전 : [ 2, 1, 3, 4, 5] 4회전 : [ 1, 2, 3, 4, 5] 2. Selection 시간복잡도 O(n²), 가장 작은 값 차례대로 배열의 맨 마지막으로 보낸다. 시작 : [ 5, 2, 4, 3, 1 ] 1회전 : [ 5 , 2, 4, 3, 1 ] => [ 1 , 2, 4, 3, 5 ] => i 는 0, min_Val 은 4 ----> swap( 0 , 4 ) 2회전 : [ 1, 2 , 4, 3, 5 ] => [ 1, 2 , 4, 3, 5 ] => i 는 1, min_Val 은 1 ----> swap( 1 , 1 ) 3회전 : [ 1, 2, 4 , 3 , 5 ] => [ 1, 2, 3 , 4 , 5 ] => i 는 2, min_Val 은 3 ----> swap( 2 , 3 ) 4회전 : [ 1, 2, 3, 4 , 5 ] => [ 1, 2, 3, 4 , 5 ] => i 는 3, min_Val 은 3 ----> swap( 3 , 3 ) 3. Insertion 시간복잡도 최선의 경우에는 O(n) 인데 이미 정렬이 되어있는 경우이다. 나머지는 Bubble, Selection과 마찬가지로 O(n²)이다. 시작 : [ 5, 2, 4, 3, 1 ] 1회전 : [ 5, 2 , 4, 3, 1 ] => [ 2, 5, 4, 3, 1 ] => i 는 1 2회전 ...