Convert array to a sorted one using only two operations
Data Structures & Algorithms practice on Codemia
Step through 300 algorithm problems with animated visualisers that show the data structure changing as the code runs.
Introduction
Sorting an array is a common operation in computer science that involves rearranging a series of elements according to a defined order. Usually, algorithms like mergesort, quicksort, or heapsort are employed for sorting tasks. However, there are scenarios where we aim to convert an array into a sorted one using only a limited set of operations. This article delves into the techniques to achieve sorting using only two specific operations: swaps and reversals.
Definition of Operations
Swaps
A swap operation involves selecting two elements from the array and interchanging their positions. This is the most basic and localized sorting operation and is frequently used in algorithms like bubblesort and quicksort.
Reversals
A reversal involves selecting a subarray and reversing the order of its elements. This can be a more powerful operation compared to swaps, as it can rearrange multiple elements in a single operation.
Steps to Convert an Array to a Sorted One
Consider an unsorted array of integers. The task is to convert it to a non-decreasing order using a combination of swaps and reversals. Below, we explore methodologies using these operations efficiently.
Use of Reversal to Optimize Swapping
- Identify Segments for Reversal:
- Scan through the array to identify segments where elements are out of order.
- Use reversal on these segments to transform the array into a more tractable form for swaps.
- Perform the Necessary Swaps:
- Once segments are reversed and the array is closer to the sorted form, execute swaps on remaining out-of-order elements.
- Swaps can be efficiently managed by employing techniques from simple sorting algorithms adapted to handle fewer misplaced elements.
Example
To illustrate, consider an initial array:
[3, 1, 2, 5, 4]
- Identify and Reverse:
- Identify the segment
(3, 1, 2)which is out of order. - Perform a reversal resulting in
(2, 1, 3, 5, 4).
- Perform Swaps:
- Swap 1 and 2:
(1, 2, 3, 5, 4) - Finally, swap 4 and 5:
(1, 2, 3, 4, 5)
Through the combination of one reversal and a couple of swaps, we efficiently sorted the array.
Key Considerations
Complexity
- Time Complexity: The time taken to identify segments and perform reversals and swaps is generally linear in the number of elements if the selection of segments is done smartly.
- Space Complexity: No additional space is utilized apart from local variables for indexing.
Practicality
- Not all arrays benefit equally from using reversals; they are most beneficial where there are blocks of consecutively misplaced elements.
- A potential downside is that complex conditions might arise, necessitating multiple reversals if the initial order is highly irregular.
Table of Operations
| Operation | Definition | Best Used When |
| Swap | Two elements interchange positions. | A small number of elements are out of order. |
| Reversal | A subarray is reversed in place. | A segment of elements is completely out of order. |
Conclusion
Using the combination of swaps and reversals to convert an array into a sorted format can provide more efficient solutions compared to using swaps alone. The strategic application of these operations can serve to optimize both time and computational resources, especially when the initial disorder of the array displays certain patterns that can be leveraged by reversal operations. This technique is particularly useful in constrained environments or in scenarios with limited operational allowances, offering a robust method to achieve the desired array order.
Related reading
- Convert Branch and Bound loop to use Java Stream API
- convert integer array into a binary tree
- Convert normal recursion to tail recursion with multiple recursive calls
- Convert parent-child array to tree
- Convert array to JSON string in swift
- Convert array to JSON string in swift
- convert double to int
- Converting JS object to ArrayBuffer to transfer to/from web worker equals bottleneck

DSA Fundamentals
Master algorithmic patterns and data structures through hands-on LeetCode-style problems - from arrays and hashing to dynamic programming and advanced graphs.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
Data Structures & Algorithms practice on Codemia
Step through 300 algorithm problems with animated visualisers that show the data structure changing as the code runs.