삽입정렬

ims·2020년 10월 2일
0

알고리즘

목록 보기
7/23

idea

정렬된 숫자를 앞으로 보내보자. 그러면 앞의 숫자들은 정렬이 돼 있으므로 최선의 경우 정렬이 다 돼있다면 실행횟수는 0이다.

rule

  1. switch를 할 때는 작은 숫자가 temp에 먼저 들어간다
  2. i <- 0 to data.length 를 할때 뒤의 숫자인 data.length가 for loop에 들어가는 condition 값인지, 실제 값인지 헷갈렸는데 실제값으로 표시하는 게 났다.
  3. data를 전부 쓰기 귀찮으니까, 실제 쓸때는 d라고 줄여서 쓰기로 하자.

위에 적은 것은 pseudo code에 추가함.

헷갈렸던 점

  1. pseudo code를 틀리게 짰는데, DESC로는 먹혔다. 그 이유는 뒤에서부터 앞으로 가는 방향으로 j를 탐색해야 했는데, 앞으로부터 뒤로 짜니까 뒤로 쭉 밀렸던 것.

  2. for loop 하나면 되지 왜 2개가 필요한지 헷갈렸었다.

j가 0 1 2 3 4 가 필요한거 아닌가?

--> j 의 값이
0
01
012
0123
01234 이런식으로 필요하므로

i <- 0 to 5
  j <- 0 to 5

pseudo code

i <- 0 to data.length
 j <- i to 0
   if data[j] data[j-1]
    switch data[j] data[j-1]

실제 구현 코드

package SortSeries;

public class InsertionSort {
    public static void main(String args[]){
        int[] data = {4,642,1123,24,532,12,56,7};
        int[] result = insertDESC(data);

        for(int i : result){
            System.out.print(i + " ");
        }

    }
    static int[] insertDESC(int data[]){
        int temp;
        for(int i=0;i<data.length;i++){
            for(int j=0;j<i;j++){
                if(data[j]<data[j+1]){
                    temp = data[j];
                    data[j]=data[j+1];
                    data[j+1]=temp;
                }
            }
        }
        return data;
    }
    static int[] insertASC(int data[]){
        int temp;
        for(int i=0;i<data.length;i++){
            for(int j=i;j>0;j--){
                if(data[j]<data[j-1]){
                    temp = data[j];
                    data[j]=data[j-1];
                    data[j-1]=temp;
                }
            }
        }
        return data;
    }
}
profile
티스토리로 이사했습니다! https://imsfromseoul.tistory.com/ + https://camel-man-ims.tistory.com/

0개의 댓글