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

칵테일 정렬을 위한 C++ 프로그램?

<시간/>

칵테일 정렬은 버블 정렬의 또 다른 변형입니다. 버블 정렬 방식에서는 항상 왼쪽에서 오른쪽으로 검색하여 마지막에서 가장 큰 요소를 찾고 두 번째 단계에서는 두 번째 마지막 위치에서 두 번째로 큰 요소를 찾습니다. 이 정렬 기술은 양방향으로 교대로 횡단합니다. 아이디어를 이해하는 알고리즘을 살펴보겠습니다.

알고리즘

칵테일(배열, n)

Begin
   flag := true
   start := 0, end := n-1
   while flag is set, do
      flag := false
      for i in range start to end-1, do
         if arr[i] > arr[i+1], then
            exchange arr[i] and arr[i+1]
            flag := true
         end if
      done
      if flag is not set, then
         break
      end if
      flag := false
      end := end – 1
      for i in range end -1 down to start, do
         if arr[i] > arr[i+1], then
            exchange arr[i] and arr[i+1]
            flag := true
         end if
      done
      start := start + 1
   done
End

예시

#include<iostream>
using namespace std;
void cocktailSort(int arr[], int n){
   bool flag = true;
   int start = 0, end = n-1;
   while(flag){
      flag = false;
      for(int i = start; i<end; i++){ //scan from left to right as bubble sort
         if(arr[i] > arr[i+1]){
            swap(arr[i], arr[i+1]);
            flag = true;
         }
      }
      if(!flag){ //if nothing has changed simply break the loop
         break;
      }
      flag = false;
      end--; //decrease the end pointer
      for(int i = end - 1; i >= start; i--){ //scan from right to left
         if(arr[i] > arr[i+1]){
            swap(arr[i], arr[i+1]);
            flag = true;
         }
      }
      start++;
   }
}
main() {
   int data[] = {54, 74, 98, 154, 98, 32, 20, 13, 35, 40};
   int n = sizeof(data)/sizeof(data[0]);
   cout << "Sorted Sequence ";
   cocktailSort(data, n);
   for(int i = 0; i <n;i++){
      cout << data[i] << " ";
   }
}

출력

Sorted Sequence 13 20 32 35 40 54 74 98 98 154