Table of contents
Given problem
Given an array nums = {3, 1, 5, 4, 2}
. How to use Cyclic sort for this array.
Solution of Cyclic Sort
When using Cyclic Sort, there are some things that we need to take note:
- At a specific position in an array, we always try to arrange it to the correct position by comparison
nums[start] != nums[current]
. - If an element lied in the correct position, process the next element.
Below is the source code of Cyclic Sort.
public static void cyclicSort(int[] nums) {
int start = 0;
while (start < nums.length) {
int current = nums[start] - 1;
if (nums[start] != nums[current]) {
swap(nums, start, current);
} else {
++start;
}
}
}
private static void swap(int[] nums, int x, int y) {
int tmp = nums[x];
nums[x] = nums[y];
nums[y] = tmp;
}
public static void main(String[] args) {
int[] nums = {3, 1, 5, 4, 2};
// int[] nums = {2, 6, 4, 3, 1, 5};
// int[] nums = {1, 5, 6, 4, 3, 2};
cyclicSort(nums);
System.out.println(Arrays.toString(nums));
}
The complexity of this Cyclic Sort:
- Time complexity: O(n)
- Space complexity: O(1)
When to use
- When our array has a range from 0 to n.
Benefits and Drawbacks
-
Benefits
- It improves our sorting for an array simply because it only needs
O(n)
for time complexity. - Its implementation is easy.
- It improves our sorting for an array simply because it only needs
-
Drawbacks
- Only use in some specific use cases.