
- C++ Basics
- C++ Home
- C++ Overview
- C++ Environment Setup
- C++ Basic Syntax
- C++ Comments
- C++ Data Types
- C++ Variable Types
- C++ Variable Scope
- C++ Constants/Literals
- C++ Modifier Types
- C++ Storage Classes
- C++ Operators
- C++ Loop Types
- C++ Decision Making
- C++ Functions
- C++ Numbers
- C++ Arrays
- C++ Strings
- C++ Pointers
- C++ References
- C++ Date & Time
- C++ Basic Input/Output
- C++ Data Structures
- C++ Object Oriented
- C++ Classes & Objects
- C++ Inheritance
- C++ Overloading
- C++ Polymorphism
- C++ Abstraction
- C++ Encapsulation
- C++ Interfaces
C++ Program for Cycle Sort?
Cycle sort is an in-place, unstable sorting algorithm, a comparison sort that is theoretically optimal in terms of the total number of writes to the original array, unlike any other in-place sorting algorithm. It is based on the idea that the permutation to be sorted can be factored into cycles, which can individually be rotated to give a sorted result.
Unlike nearly every other sort, items are never written elsewhere in the array simply to push them out of the way of the action. Each value is either written zero times, if it's already in its correct position or written one time to its correct position. This matches the minimal number of overwrites required for a completed in-place sort.
Minimizing the number of writes is useful when making writes to some huge data set is very expensive, such as with EEPROMs like Flash memory where each write reduces the lifespan of the memory.
Input: a[]={7,4,3,5,2,1,6} Output: 1 2 3 4 5 6 7
Explanation
arr[] = {10, 5, 2, 3} index = 0 1 2 3 cycle_start = 0 item = 10 = arr[0] Find position where we put the item, pos = cycle_start while (arr[i] < item) pos++; We put 10 at arr[3] and change item to old value of arr[3]. arr[] = {10, 5, 2, 10} item = 3 Again rotate rest cycle that start with index '0' Find position where we put the item = 3 we swap item with element at arr[1] now arr[] = {10, 3, 2, 10} item = 5 Again rotate rest cycle that start with index '0' and item = 5 we swap item with element at arr[2]. arr[] = {10, 3, 5, 10 } item = 2 Again rotate rest cycle that start with index '0' and item = 2 arr[] = {2, 3, 5, 10} Above is one iteration for cycle_stat = 0. Repeat above steps for cycle_start = 1, 2, ..n-2
Example
#include<iostream> using namespace std; void cycleSort(int a[], int n) { int writes = 0; for (int c_start = 0; c_start <= n - 2; c_start++) { int item = a[c_start]; int pos = c_start; for (int i = c_start + 1; i < n; i++) if (a[i] < item) pos++; if (pos == c_start) continue; while (item == a[pos]) pos += 1; if (pos != c_start) { swap(item, a[pos]); writes++; } while (pos != c_start) { pos = c_start; for (int i = c_start + 1; i < n; i++) if (a[i] < item) pos += 1; while (item == a[pos]) pos += 1; if (item != a[pos]) { swap(item, a[pos]); writes++; } } } } int main() { int a[] ={7,4,3,5,2,1,6}; int n = 7; cycleSort(a, n); for (int i = 0; i < n; i++) cout << a[i] << " "; return 0; }
- Related Articles
- Python Program for Cycle Sort
- Cycle Sort
- C++ Program to Check Cycle in a Graph using Topological Sort
- C/C++ Program for Odd-Even Sort (Brick Sort)?
- C++ Program for Cocktail Sort?
- C++ Program for Comb Sort?
- C++ Program for Gnome Sort?
- C++ Program for Pigeonhole Sort?
- C Program for Selection Sort?
- C Program for Radix Sort
- C/C++ Program for the Odd-Even Sort (Brick Sort)?
- C++ Program for Recursive Bubble Sort?
- C++ Program for the Cocktail Sort?
- C++ Program for the Comb Sort?
- C++ Program for the Gnome Sort?
