Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

쉘 정렬을 구현하는 C++ 프로그램

<시간/>

쉘 정렬 기술은 삽입 정렬을 기반으로 합니다. 삽입 정렬에서 때때로 올바른 위치에 항목을 삽입하기 위해 큰 블록을 이동해야 합니다. 쉘 정렬을 사용하면 많은 수의 이동을 피할 수 있습니다. 정렬은 특정 간격으로 수행됩니다. 각 패스 후에 간격이 줄어들어 간격이 더 작아집니다.

쉘 정렬 기법의 복잡성

  • 시간 복잡도:최상의 경우 O(n log n), 다른 경우 간격 시퀀스에 따라 다릅니다.

  • 공간 복잡도:O(1)

입력 - 정렬되지 않은 목록:23 56 97 21 35 689 854 12 47 66출력 - 정렬 후 배열:12 21 23 35 47 56 66 97 689 854

알고리즘

shellSort(배열, 크기)

입력 :데이터 배열 및 배열의 ​​총 개수

출력 :정렬된 배열

gap 시작 :=size / 2, gap>
 0이고 gap이 gap으로 갱신될 때 / 2 do for j:=gap to size– 1 do for k :=j-gap to 0, gap 값만큼 감소 do if array[k+gap]>=array[k] break else 스왑 array[k + gap] with array[k] 완료 doneEnd

예시 코드

#include네임스페이스 사용 std;void swapping(int &a, int &b) { //a와 b의 내용을 교환 int temp; 온도 =에이; a =b; b =임시;} 무효 디스플레이(int *배열, 정수 크기) { for(int i =0; i<크기; i++) cout <
 0; gap =gap / 2) { //처음에는 gap =n/2, gap /2만큼 감소 for(j =gap; j=0, k -=갭) { if(arr[k+gap]>=arr[k]) break; 그렇지 않으면 스와핑(arr[k+gap], arr[k]); } } }}int main() { int n; cout <<"요소의 개수를 입력하세요:"; 신>> n; 정수 [n]; // 주어진 수의 요소로 배열 생성 cout <<"Enter elements:" <> arr[i]; } cout <<"정렬 전 배열:"; 디스플레이(arr, n); shellSort(arr, n); cout <<"정렬 후 배열:"; 디스플레이(arr, n);}

출력

요소 수 입력:10요소 입력:23 56 97 21 35 689 854 12 47 66정렬 전 배열:23 56 97 21 35 689 854 12 47 66정렬 후 배열:12 5 21 6 6 273 사전>