목록분류 전체보기 (28)
연장챙겨

- 셸 정렬은 해당 작업을 반복한다1. 비교 간격을 정하고 간격 당 값을 그룹화한다2. 만들어진 그룹을 삽입 정렬을 통해 정렬한다3. 비교 간격을 절반으로 줄인다(간격이 1이 될 때까지 진행하며 1일 경우 전체 정렬을 수행하게 되므로 종료) 평소에 알고리즘을 공부를 잘 안해서 개인적으로 쉘 정렬이 제일 어려웠다이참에 정리하면서 도움이 돼 앞으로 더 유연한 사고를 가질 수 있을 것 같다 이 글을 보는 사람이 이해가 쉽게 추가로 첨언하자면 입력 값인 배열이 [ 3, 5, 1, 2, 6 ]가 존재한다면괭이질하듯이 gap부터 뒤로 차례대로 이동한다gap부터 시작하고 배열 끝까지 차례대로 진행2와 0을 비교 -> 3과 1을 비교 -> 4와 2를 비교비교할 땐 지금 gap이 있는 값을 key로 저장하고key 값과 ..
- 삽입 정렬은 해당 작업을 반복한다1. 차례대로 값을 지정한다(첫 번째 생략)2. 정렬될 위치를 찾는다(한 칸씩 앞으로 이동)3. 해당 순서에 넣기 위해 자리를 만든다(한 칸씩 뒤로 이동)(교환이 없다면 이미 정렬이 되어있는 상태) 선택 정렬과 작동이 비슷한 느낌의 방법그보다 효율적이지만 구현이 비교적 복잡하고 직관적이지 못하다추가로 더 빠르고 좋은 정렬 알고리즘이 많이 나와있어서이 정렬을 굳이 사용해보겠다가 아니라면 잘 안쓰지 않을까버블이나 선택 정렬은 만들기라도 쉬우니 귀찮다면 쓸거같은데... - 자바로 간단한 예제를 짜고 주석을 달아놓고//n개 입력 값을 받음(입력 값을 모른다는 가정)int[] array = new int[n];//정렬 중인 값int key;//비교를 위한 번호int comp..
- 버블 정렬은 해당 작업을 반복한다1. 바로 다음 차수와 비교한다2. 다음 차수보다 현재 차수가 크다면 교환(교환이 없다면 이미 정렬이 되어있는 상태) 반복 과정에서 정렬되는 순서를 직관적으로 알 수 있으며선택 정렬과 같이 쉽고 간단한 구현도라서 좋아하는 방법이다교환 여부로 정렬 완료 시점을 알 수 있어 최적화도 가능하다 - 자바로 간단한 예제를 짜고 주석을 달아놓고//n개 입력 값을 받음(입력 값을 모른다는 가정)int[] array = new int[n];//교환 여부boolean flag = true;//교환이 없을 경우 종료for(int sortIdx = 0; flag; sortIdx++) { flag = false; //교환을 위한 입력 값 순환 for(int comp..
- 선택 정렬은 해당 작업을 반복한다1. 가장 작은 수를 찾는다2. 정렬되지 않은 가장 앞 부분과 교환(교환이 없다면 이미 정렬이 되어있는 상태) 우리가 카드 등을 숫자 별로 정리한다고 생각했을 때가장 먼저 떠오르는 정렬 방법이다그만큼 쉽고 구현도 간단하지만단점은 버블 정렬과 달리 정렬 완료 시점을 알지 못해최적화가 되지 않는다는 것이다 - 자바로 간단한 예제를 짜고 주석을 달아놓고//n개 입력 값을 받음(입력 값을 모른다는 가정)int[] array = new int[n];//최소 값 번호int minIdx;//교환을 위한 입력 값 순환for(int sortIdx = 0; sortIdx array[findIdx]) { minIdx = findIdx; } } ..