kkkkkkkkkkkk
kkkkk
kkkkkkkkkkkk
전체 방문자
오늘
어제
  • 분류 전체보기
    • CS & OS
    • Algorithms
    • Laguage
    • Book
      • 객체지향의 사실과 오해
      • Effective Java
      • Spring boot 와 AWS로 혼자 구현하는 ..
      • 도메인 주도 계발 시작하기
    • DB
    • Spring
    • Spring Boot
    • JPA
    • Git
    • Clean Code
    • HTTP

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 책임
  • 역할
  • 객체지향 프로그래밍
  • 응집도
  • 설계 원칙
  • 결합도

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
kkkkkkkkkkkk

kkkkk

Algorithms

[Sort] 셸 정렬 (Shell Sort)

2022. 6. 26. 22:55

소개

  • 삽입정렬의 단점을 보완하고자 나온 셸 정렬이다.
  • 간격(gap) 에 맞추어 삽입정렬을 하는 정렬이다.
  • O(n2)의 시간복잡도를 가지지만 삽입정렬보단 효율적이다.

 

동작원리

  • 배열의 길이 / 2 를 gap 으로 설정
  • 첫번째 인덱스 부터 gap에 맞는 요소들을 삽입 정렬 진행
  • 위의 순서 반복

 

구현 코드

public static int[] sort(int[] nums) {
    int length = nums.length;

    for (int gap = length / 2; gap > 0; gap /= 2) {
        for (int startIndex = 0; startIndex < gap; startIndex++) {
						insertionSort(nums, startIndex, gap);
        }
    }
    return nums;
}

private static void insertionSort(int[] nums, int startIndex, int gap) {
    for (int i = startIndex + gap; i < nums.length; i += gap) {
        int temp = nums[i];
        int j;
        for (j = i - gap; j >= 0 && nums[j] > temp; j -= gap) {
            nums[j + gap] = nums[j];
        }
        nums[j + gap] = temp;
    }
}

 

'Algorithms' 카테고리의 다른 글

[Tree] 트리  (0) 2022.07.10
[Sort] 퀵 정렬 (Quick Sort)  (0) 2022.06.26
[Sort] 병합 정렬 (Merge Sort)  (0) 2022.06.26
[Sort] 삽입 정렬 ( Insertion Sort)  (0) 2022.06.26
[Sort] 선택 정렬 (Selection Sort)  (0) 2022.06.26
[Sort] 버블 정렬 (Bubble Sort)  (0) 2022.06.26
[Sort] 선형 탐색 (Linear Search)  (0) 2022.06.26
[JAVA] 해싱 동작 방식  (0) 2022.01.17
    'Algorithms' 카테고리의 다른 글
    • [Sort] 퀵 정렬 (Quick Sort)
    • [Sort] 병합 정렬 (Merge Sort)
    • [Sort] 삽입 정렬 ( Insertion Sort)
    • [Sort] 선택 정렬 (Selection Sort)
    kkkkkkkkkkkk
    kkkkkkkkkkkk

    티스토리툴바