IT/알고리즘
[백준] 2750
So1_b
2022. 9. 18. 13:57
https://www.acmicpc.net/submit/2750/49300262
로그인
www.acmicpc.net
[문제 설명]
- 셸 알고리즘 사용
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int length = scan.nextInt();
int[] arr = new int[length];
for(int i=0; i<length; i++) {
arr[i] = scan.nextInt();
}
sort(arr, length);
for(int n:arr)
System.out.println(n);
}//main
//정렬하는 메소드
static void sort(int[] a, int length) {
//간격 (최소: 1, 최대: 배열의 길이보다 작아야 한다 + (부분집합 내 요소가 최소 2개)
int h;
for(h=1; h<length/9 ;h=h*3+1);
for(;h>0;h/=3) {
for(int i=h; i<length; i++) { //정렬되지 않는 범위를 지정하는 변수i
int start = a[i]; //정렬X범위의 첫 요소
int j;
//정렬된 범위를 지정해 이전 요소들과 비교
for(j=i-h; j>=0 && start<a[j]; j-=h)
a[j+h] = a[j];
a[j+h] = start;
}
}
}//sort
}