Circular sorting
Pre-requisite : elements of the array should be between 1 to length of the array
In Circular Sorting
elements are placed at their natural indexs
Example:if the array is [5,4,2,1,3] => [1,2,3,4,5]
import java.util.*; public class Main { public static void main(String[] args) { int arr[] = {5,4,2,1,3}; findDuplicates(arr); for(int i =0;i<arr.length;i++){ System.out.println(arr[i]); } } public static void findDuplicates(int[] nums){ int i =0,n = nums.length; while(i<n){ int j = nums[i]-1; if(nums[i]!=nums[j]){ swap(nums,i,j); } else i++; } } public static void swap(int[] nums,int i ,int j){ int temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; } }
Usage:
Its useful in identifying duplicates in the array
It can also be used to find missing elements in the array
Example : Finding missing element in the array of length n
where the elements of the array are in the range 0<=element<=n
class Solution { public int missingNumber(int[] nums) { int i =0,n = nums.length; // circular sorting while(i<n){ int j = nums[i]-1; if(j<0) {i++ ; continue;} else if(nums[i]!=nums[j]) swap(nums,i,j); else i++; } int missing = 0; for(int k = 0;k<nums.length;k++){ if(k!=nums[k]-1){ missing = k+1; break;} } return missing; } public void swap(int[] nums,int i,int j){ int temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; } }
Top comments (0)