빗 정렬

  1. 빗 정렬 알고리즘
  2. 콤 정렬 예
  3. Comb Sort 알고리즘 구현
  4. 조합 정렬 알고리즘 복잡성
빗 정렬

콤 정렬은 간단한 비교 기반 정렬 알고리즘입니다. 버블 정렬의 개선 된 형태입니다. 버블 정렬에서 인접한 요소는 각 통과 / 단계에서 비교되고 반전을 하나씩 제거합니다. 반면에 콤 정렬은 큰 간격을 사용하여 시작하여 ‘1.3’의 축소 계수로 매번 줄입니다. Comb Sort는 단 한 번의 스왑으로 여러 반전을 제거 할 수 있습니다. 그것은 거북이를 죽이는 아이디어에 기초합니다. 거북이는 목록 끝 부분에있는 작은 요소로, 버블 정렬의 효율성을 낮추고 제거하면 정렬 성능이 크게 향상됩니다.

빗 정렬 알고리즘

n 요소를 포함하는 정렬되지 않은 배열A[]가 있다고 가정 해 보겠습니다. 축소 계수는 경험적으로 최상의 결과를 제공하는 것으로 확인되었으므로 ‘1.3’으로 간주합니다.

  • 변수gap을 배열의 크기로 초기화하고 변수swappedtrue로 초기화합니다.
  • 상수 변수SHRINK_FACTOR1.3으로 선언합니다.
  • gap이 1이 아니거나swappedtrue로 설정되어있는 동안 다음을 수행하십시오.
    • Set swapped as false.
    • Set gap as (int)gap/SHRINK_FACTOR.
    • For every element in the range 0 to n - gap do the following - if A[i] > A[i+gap], swap(A[i], A[i+gap]) and set swapped to true.

콤 정렬 예

배열이(3, 5, 2, 8, 1, 7, 6, 4)라고 가정합니다. Comb 정렬 알고리즘을 사용하여 정렬합니다.

gap = 8,swapped =trueSHRINK_FACTOR =1.3을 초기화합니다.

  • 첫 번째 패스

= 8 / 1.3 = 6,스왑 됨=false

되풀이 (3, 5, 2, 8, 1, 7, 6, 4) 동작
** i = 0 ** (3, 5, 2, 8, 3, 7, 6, 4) 3 <6, 스왑 없음
** i = 1 ** (3, ** 4 **, 2, 8, 1, 7, 6, ** 5 **) 5> 4, 스왑
  • 두 번째 패스

= 6 / 1.3 = 4,스왑 됨=false

되풀이 (3, ** 4 **, 2, 8, 1, 7, 6, ** 5 **) 동작
** i = 0 ** (** 1 **, 4, 2, 8, ** 3 **, 7, 6, 5) 3> 1, 스왑
** i = 1 ** (1, 4, 2, 8, 3, 7, 6, 5) 4 <7, 스왑 없음
** i = 2 ** (1, 4, 2, 8, 3, 7, 6, 5) 2 <6, 스왑 없음
** i = 3 ** (1, 4, 2, ** 5 **, 3, 7, 6, ** 8 **) 8> 5, 스왑
  • 세 번째 패스

= 4 / 1.3 = 3,스왑 됨=false

되풀이 (1, 4, 2, ** 5 **, 3, 7, 6, ** 8 **) 동작
** i = 0 ** (1, 4, 2, 5, 3, 7, 6, 8) 1 <5, 스왑 없음
** i = 1 ** (1, ** 3 **, 2, 5, ** 4 **, 7, 6, 8) 4> 3, 스왑
** i = 2 ** (1, 3, 2, 5, 4, 7, 6, 8) 2 <7, 스왑 없음
** i = 3 ** (1, 3, 2, 5, 4, 7, 6, 8) 5 <6, 스왑 없음
** i = 4 ** (1, 3, 2, 5, 4, 7, 6, 8) 4 <8, 스왑 없음
  • 네 번째 패스

= 3 / 1.3 = 2,스왑 됨=false

되풀이 (1, 3, 2, 5, 4, 7, 6, 8) 동작
** i = 0 ** (1, 3, 2, 5, 4, 7, 6, 8) 1 <2, 스왑 없음
** i = 1 ** (1, 3, 2, 5, 4, 7, 6, 8) 3 <5, 스왑 없음
** i = 2 ** (1, 3, 2, 5, 4, 7, 6, 8) 2 <4, 스왑 없음
** i = 3 ** (1, 3, 2, 5, 4, 7, 6, 8) 5 <7, 스왑 없음
** i = 4 ** (1, 3, 2, 5, 4, 7, 6, 8) 4 <6, 스왑 없음
** i = 5 ** (1, 3, 2, 5, 4, 7, 6, 8) 7 <8, 스왑 없음
  • 다섯 번째 패스

= 2 / 1.3 = 1,스왑 됨=false

되풀이 (1, 3, 2, 5, 4, 7, 6, 8) 동작
** i = 0 ** (1, 3, 2, 5, 4, 7, 6, 8) 1 <3, 스왑 없음
** i = 1 ** (1, ** 2 **, ** 3 **, 5, 4, 7, 6, 8) 3> 2, 스왑
** i = 2 ** (1, 2, 3, 5, 4, 7, 6, 8) 3 <5, 스왑 없음
** i = 3 ** (1, 2, 3, ** 4 **, ** 5 **, 7, 6, 8) 5> 4, 스왑
** i = 4 ** (1, 2, 3, 4, 5, 7, 6, 8) 5 <7, 스왑 없음
** i = 5 ** (1, 2, 3, 5, 4, ** 6 **, ** 7 **, 8) 7> 6, 스왑
** i = 6 ** (1, 2, 3, 4, 5, 6, 7, 8) 7 <8, 스왑 없음

최종 정렬 된 배열을(1, 2, 3, 4, 5, 6, 7, 8)로 얻습니다.

Comb Sort 알고리즘 구현

#include <iostream>
using namespace std;

int updateGap(int gap) {
  gap = (gap * 10) / 13;
  if (gap < 1)
    return 1;
  else
    return gap;
}

void combSort(int arr[], int n) {
  int gap = n;
  bool swapped = true;
  while (gap > 1 || swapped == true) {
    gap = updateGap(gap);
    swapped = false;
    for (int i = 0; i < (n - gap); i++) {
      int temp;
      if (arr[i] > arr[i + gap]) {
        temp = arr[i];
        arr[i] = arr[i + gap];
        arr[i + gap] = temp;
        swapped = true;
      }
    }
  }
}

int main() {
  int n = 6;
  int arr[6] = {5, 3, 4, 2, 1, 6};
  cout << "Input array: ";
  for (int i = 0; i < n; i++) {
    cout << arr[i] << " ";
  }
  cout << "\n";
  combSort(arr, n);
  cout << "Output array: ";
  for (int i = 0; i < n; i++) {
    cout << arr[i] << " ";
  }
  cout << "\n";
}

조합 정렬 알고리즘 복잡성

시간 복잡성

  • 평균 사례

시간 복잡도는 [Big Theta] : O(n2/ 2 p)의 순서입니다. 여기서p는 증분 수입니다.

  • 최악의 경우

최악의 경우 시간 복잡도는 [Big O] : O(n2)입니다.

  • 베스트 케이스

가장 좋은 경우는 배열이 이미 정렬되었거나 거의 정렬되었을 때 발생합니다. 최적의 시간 복잡도는 [Big Omega] :O(nlogn)입니다. 버블 정렬의 최상의 경우 시간 복잡성에 비해 크게 개선되었습니다.

공간 복잡성

이 알고리즘의 공간 복잡성은 O(n)입니다. 콤 정렬 알고리즘은 임시 변수 외에 추가 공간이 필요하지 않기 때문입니다.

튜토리얼이 마음에 드시나요? DelftStack을 구독하세요 YouTube에서 저희가 더 많은 고품질 비디오 가이드를 제작할 수 있도록 지원해주세요. 구독하다
Harshit Jindal avatar Harshit Jindal avatar

Harshit Jindal has done his Bachelors in Computer Science Engineering(2021) from DTU. He has always been a problem solver and now turned that into his profession. Currently working at M365 Cloud Security team(Torus) on Cloud Security Services and Datacenter Buildout Automation.

LinkedIn

관련 문장 - Sort Algorithm