- 알고리즘 도감 참고
- O(n^2) 의 시간복잡도
내 코드
import java.util.Scanner;
public class Main {
public static void swap(int[] arr, int i, int j){
int temp = arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
public static void main(String[] args){
//입력받기
Scanner in = new Scanner(System.in);
int length = in.nextInt();
int[] arr = new int[length];
for (int i=0; i<length; i++){
arr[i]= in.nextInt();
}
for (int i=1; i<length;i++){
for (int j=i;j>=1;j--){
if (arr[j-1]>arr[j]){
swap(arr,j-1,j);
} else {
break;
}
}
for (int e : arr){
System.out.print(e+" ");
}
System.out.println();
}
System.out.println("finally");
for (int e : arr){
System.out.print(e+" ");
}
}
}
- j=i 부터 j>=1 까지 감소하면서 자신보다 큰 수가 앞에 있으면 둘이 자리를 바꾸면서 앞으로 이동함
- 자신보다 작거나 같은 수를 만나면 루프 종료하고 다음 루프로

강의 코드
import java.util.Scanner;
public class Main {
public static void swap(int[] arr, int i, int j){
int temp = arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
public static void main(String[] args){
//입력받기
Scanner in = new Scanner(System.in);
int length = in.nextInt();
int[] arr = new int[length];
for (int i=0; i<length; i++){
arr[i]= in.nextInt();
}
for (int i=1; i<length; i++){
int temp = arr[i],j;
for (j=i-1; j>=0; j--){
if (arr[j]>temp) arr[j+1] = arr[j];
else break;
}
arr[j+1]=temp;
}
System.out.println("finally");
for (int e : arr){
System.out.print(e+" ");
}
}
}