여기서 우리는 gnome 정렬이 어떻게 작동하는지 볼 것입니다. 이것은 또 다른 정렬 알고리즘입니다. 이 접근 방식에서는 목록이 이미 정렬되어 있으면 O(n) 시간이 걸립니다. 따라서 최상의 시간 복잡도는 O(n)입니다. 그러나 평균 경우와 최악의 경우 복잡도는 O(n^2)입니다. 이제 이 정렬 기술에 대한 아이디어를 얻기 위한 알고리즘을 살펴보겠습니다.
알고리즘
gnomeSort(arr, n)
begin index := 0 while index < n, do if index is 0, then index := index + 1 end if if arr[index] >= arr[index -1], then index := index + 1 else exchange arr[index] and arr[index - 1] index := index - 1 end if done end
예시
#include<iostream> using namespace std; void gnomeSort(int arr[], int n){ int index = 0; while(index < n){ if(index == 0) index++; if(arr[index] >= arr[index - 1]){ //if the element is greater than previous one index++; } else { swap(arr[index], arr[index - 1]); index--; } } } main() { int data[] = {54, 74, 98, 154, 98, 32, 20, 13, 35, 40}; int n = sizeof(data)/sizeof(data[0]); cout << "Sorted Sequence "; gnomeSort(data, n); for(int i = 0; i <n;i++){ cout << data[i] << " "; } }
출력
Sorted Sequence 13 20 32 35 40 54 74 98 98 154