Gnome sort

Gnome sort


Gnome sort
Sorting gnomesort anim.gif
최적화된 Gnome 정렬의 시각화 .
클래스정렬 알고리즘
데이터 구조배열
최악의 경우 공연
베스트 케이스 공연
평균 공연
최악의 경우 공간 복잡성( ) O 보조

Gnome sort(이중 바보 sort)는 이란의 컴퓨터 과학자 Hamid Sarbazi-Azad(샤리프 공과대학 컴퓨터과학공학과 교수)[1]가 2000년 제안한 분류 알고리즘이다. 이 분류는 처음에는 (거짓말과 혼동되지 않기 위해) 바보[2] 같은 분류라고 불렸으며, 나중에 딕 그루네에 의해 묘사되어 gnome 분류라고 명명되었다.[3]

gnome sort는 한 번에 한 항목과 함께 작동하지만 일련의 스왑을 통해 해당 항목을 적절한 위치에 배치한다는 점에서 삽입 정렬 알고리즘과 유사한 것이다. 그것은 내포된 루프가 필요 없는 개념적으로 간단하다. 평균 가동 시간은 O(n2)이지만, 목록이 처음에 거의 정렬되어 있으면 O(n) 쪽으로 기울어진다.[4][note 1]

알고리즘은 인접한 두 원소의 순서가 틀린 곳을 먼저 찾아 스와핑한다. 그것은 스왑을 수행하면 이전에 교환된 요소 옆에 새로운 순서가 맞지 않는 인접 쌍을 도입할 수 있다는 사실을 이용한다. 현재 위치의 전방 요소가 정렬된다고 가정하지 않기 때문에 스와핑된 요소 바로 앞의 위치만 확인하면 된다.

설명

딕 그루네는 다음과 같은 이야기로 분류 방법을 설명했다.[3]

Gnome Sort는 표준 네덜란드 가든 Gnome(Du.: tuinkabouter)에서 사용하는 기술을 기반으로 한다.
정원 지놈은 이렇게 화분 한 줄을 분류한다.
기본적으로 옆에 있는 화분과 앞의 화분을 보고, 순서가 맞으면 한 화분을 앞으로 내딛고, 그렇지 않으면 화분을 바꿔서 한 화분을 뒤로 내딛는다.
경계 조건: 이전의 항아리가 없으면 앞으로 나아가고, 옆에 항아리가 없으면 끝난다.

"Gnome Sort - The Simplest Sort Algorithm". Dickgrune.com

코드

0 기반 배열을 사용하는 gnome 정렬에 대한 유사 코드:

procedure gnomeSort(a]): pos : 0, pos < length(a): pos : (pos == 0 또는 a[pos] >= a: pos + 다른 1: swap a[pos] 및 a[pos-1] pos := pos - 1 

정렬되지 않은 배열인 a = [5, 3, 2, 4]를 지정하면 gnome 정렬은 루프 중에 다음 단계를 수행한다. 현재 위치가 굵게 강조 표시되고 변수 값으로 표시됨 pos.

현재 배열 pos 유효조건 수행할 작업
[5, 3, 2, 4] 0 pos == 0 양을 늘리다.
[5, 3, 2, 4] 1 a[pos] a[pos-1] 스왑, 노화 포지션
[3, 5, 2, 4] 0 pos == 0 양을 늘리다.
[3, 5, 2, 4] 1 a[pos] a[pos-1] 양을 늘리다.
[3, 5, 2, 4] 2 a[pos] a[pos-1] 스왑, 노화 포지션
[3, 2, 5, 4] 1 a[pos] a[pos-1] 스왑, 노화 포지션
[2, 3, 5, 4] 0 pos == 0 양을 늘리다.
[2, 3, 5, 4] 1 a[pos] a[pos-1] 양을 늘리다.
[2, 3, 5, 4] 2 a[pos] a[pos-1] 증가 위치:
[2, 3, 5, 4] 3 a[pos] a[pos-1] 스왑, 노화 포지션
[2, 3, 4, 5] 2 a[pos] a[pos-1] 양을 늘리다.
[2, 3, 4, 5] 3 a[pos] a[pos-1] 양을 늘리다.
[2, 3, 4, 5] 4 pos == 길이(a) 끝마친

최적화

목록의 시작 부분으로 다시 이동하기 전에 위치를 저장하는 변수를 도입하여 gnome 정렬을 최적화할 수 있다. 이 최적화와 함께 gnome 종류는 삽입 종류의 변형이 될 것이다.

0 기반 배열을 사용하여 최적화된 gnome 정렬에 대한 유사 코드:

절차 최적화GnomeSort(a[]):     1 ~ 길이(a):         gnomeSort(a, pos)  프로시저 gnomeSort(a[], upperBound):      pos :=상위 경계     pos > 0과 a[pos-1] > a[pos] 동안:          a[pos-1]와 a[pos]를 교환하다         pos := pos - 1 

메모들

  1. ^ 거의 정렬됨은 목록의 각 항목이 적절한 위치(일부 작은 일정 거리보다 멀지 않음)에서 멀지 않음을 의미한다.

참조

  1. ^ Hamid, Sarbazi-Azad. "Hamid Sarbazi-Azad profile page". Archived from the original on 2018-10-16. Retrieved October 16, 2018.
  2. ^ Sarbazi-Azad, Hamid (2 October 2000). "Stupid Sort: A new sorting algorithm" (PDF). Newsletter. Computing Science Department, Univ. of Glasgow (599): 4. Archived (PDF) from the original on 7 March 2012. Retrieved 25 November 2014.
  3. ^ a b "Gnome Sort - The Simplest Sort Algorithm". Dickgrune.com. 2000-10-02. Archived from the original on 2017-08-31. Retrieved 2017-07-20.
  4. ^ Paul E. Black. "gnome sort". Dictionary of Algorithms and Data Structures. U.S. National Institute of Standards and Technology. Archived from the original on 2011-08-11. Retrieved 2011-08-20.

외부 링크