//Returns Sorted elements after performing Cocktail Selection Sort //It is a Sorting algorithm which chooses the minimum and maximum element in an array simultaneously, //and swaps it with the lowest and highest available position iteratively or recursively #include using namespace std; //Iterative Version void CocktailSelectionSort(vector &vec, int low, int high) { while (low <= high) { int minimum = vec[low]; int minimumindex = low; int maximum = vec[high]; int maximumindex = high; for (int i = low; i <= high; i++) { if (vec[i] >= maximum) { maximum = vec[i]; maximumindex = i; } if (vec[i] <= minimum) { minimum = vec[i]; minimumindex = i; } } if (low != maximumindex || high != minimumindex) { swap(vec[low], vec[minimumindex]); swap(vec[high], vec[maximumindex]); } else { swap(vec[low], vec[high]); } low++; high--; } } //Recursive Version void CocktailSelectionSort(vector &vec, int low, int high) { if (low >= high) return; int minimum = vec[low]; int minimumindex = low; int maximum = vec[high]; int maximumindex = high; for (int i = low; i <= high; i++) { if (vec[i] >= maximum) { maximum = vec[i]; maximumindex = i; } if (vec[i] <= minimum) { minimum = vec[i]; minimumindex = i; } } if (low != maximumindex || high != minimumindex) { swap(vec[low], vec[minimumindex]); swap(vec[high], vec[maximumindex]); } else { swap(vec[low], vec[high]); } CocktailSelectionSort(vec, low + 1, high - 1); } //main function, select any one of iterative or recursive version int main() { int n; cout << "Enter number of elements\n"; cin >> n; std::vector v(n); cout << "Enter all the elements\n"; for (int i = 0; i < n; ++i) { cin >> v[i]; } CocktailSelectionSort(v, 0, n - 1); cout << "Sorted elements are\n"; for (int i = 0; i < n; ++i) { cout << v[i] << " "; } return 0; }