삽입정렬

OneTwoThree·2023년 6월 24일

알고리즘

목록 보기
13/22
  • 알고리즘 도감 참고
  • 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+" ");
        }

    }
}

0개의 댓글