반응형
package Algorithm;
import java.util.Arrays;
public class Shell{
static void shellSort(int[] arr){
int n = arr.length; // 8배열이라고 가정
for(int i = n/2; i > 0; i /= 2){ //배열 크기의 반을 구하고 반복마다 나누기 2씩 반복
for(int k = i; k < n; k++){
System.out.println("k : " + k);//i를 인덱스로 잡고 삽입정렬 시작 (단순 삽입정렬은 1부터 시작, 여기는 i부터)
int j;
int tmp = arr[k]; //인덱스 4 (5번째값) , 5, 6, 7, 8
for (j = k-i; j >= 0 && arr[j] > tmp; j -= i) {
//인덱스 0,1,2,3,4 씩 k와 동일하게 이동 / 조건은 삽입정렬 그대로 / 숫자낮은 정렬 시행시 그전 정렬값 확인
System.out.println("j : " + j);
arr[j + i] = arr[j];
}
arr[j + i] = tmp;
}
System.out.println(Arrays.toString(arr));
}
}
public static void main(String[] args) {
int[] arr = {8,1,4,2,7,6,3,5};
shellSort(arr);
}
}
반응형
'코딩테스트' 카테고리의 다른 글
[JAVA] 최대공약수 찾기 (0) | 2022.07.23 |
---|---|
[JAVA] 하노이 탑 알고리즘 (0) | 2022.07.23 |
[JAVA] 단순 삽입정렬 (0) | 2022.07.18 |
[JAVA] 단순 선택정렬 (0) | 2022.07.18 |
[JAVA] Stack를 사용한 깊이우선 탐색 (DFS) Stack제네릭 사용 X (0) | 2022.07.15 |