버블정렬을 거꾸로 하는거 같다..

삽입정렬이라 하는 이유는 작은 값을 앞에 끼워넣기 때문이라고 한다 근데 실제로 구현은 스왑처리를 한다.

1회차 순회
1번인덱스의 값을 0번인덱스와 비교후 1번이더 작으면 스왑 아니면 break;

2회차 순회
2번인덱스의 값을 1번인덱스와 비교후 2번이 더 작으면 스왑 아니면 break;
1번인덱스의 값을 0번인덱스와 비교후 1번이더 작으면 스왑 아니면 break;

3회차 순회
3번인덱스의 값을 2번인덱스와 비교후 3번이 더 작으면 스왑 아니면 break;
2번인덱스의 값을 1번인덱스와 비교후 2번이 더 작으면 스왑 아니면 break;
1번인덱스의 값을 0번인덱스와 비교후 1번이더 작으면 스왑 아니면 break;

결과

public class InsertionSort {

    ArrayList<Integer>  list;

    InsertionSort()
    {
        list = new ArrayList<>();
    }

    void Add(Integer value)
    {
        list.add(value);
    }

    void Sort()
    {
        for(int i = 0; i < list.size()-1; ++i)
        {
            for(int j = i+1; j > 0; --j)
            {
                if(list.get(j-1) > list.get(j))
                {
                    Collections.swap(list, j-1, j);
                }
                else
                    break;
            }
        }
    }

    @Override
    public String toString() {
        return "InsertionSort{" +
                "list=" + list +
                '}';
    }
}
public class InsertionSortTest {
    public static void main(String[] args) {
        InsertionSort is = new InsertionSort();

        is.Add(10);
        is.Add(9);
        is.Add(8);
        is.Add(7);

        is.Sort();

        System.out.println(is);
    }
}

오랜만에 다시 짜봄.. 1시간30분이나 걸렸다 하..

public class InsertionSort {


    public static void main(String[] args) {

        int[] arr = {78, 5, 2, 15, 7};

        int idx = 0;
        int value = 0;
        for (int i = 0; i < arr.length -1; i++) {
            value = arr[i+1];
            for (int j = i; j >= 0; j--) {
                if(arr[j] > value){
                    arr[j+1] = arr[j];
                }else {
                    idx = j+1;
                    break;
                }
            }

            arr[idx] = value;

        }

        for(int i : arr){
            System.out.println(i);
        }
    }
}
profile
게임개발자 백엔드개발자

0개의 댓글