# Position of an element after stable sort

Given an array of integers which may contain duplicate elements, an element of this array is given to us, we need to tell the final position of this element in the array, if a stable sort algorithm is applied.

Examples :

```Input  : arr[] = [3, 4, 3, 5, 2, 3, 4, 3, 1, 5], index = 5
Output : 4
Element initial index – 5 (third 3)
After sorting array by stable sorting algorithm, we get
array as shown below
[1(8), 2(4), 3(0), 3(2), 3(5), 3(7), 4(1), 4(6), 5(3), 5(9)]
with their initial indices shown in parentheses next to them,
Element's index after sorting = 4
```

## Recommended: Please solve it on “PRACTICE ” first, before moving on to the solution.

One easy way to solve this problem is to use any stable sorting algorithm like Insertion Sort, Merge Sort etc and then get the new index of given element but we can solve this problem without sorting the array.
As position of an element in a sorted array is decided by only those elements which are smaller than given element. We count all array elements smaller than given element and for those elements which are equal to given element, elements occurring before given elements’ index will be included in count of smaller elements this will insure the stability of the result’s index.
Simple code to implement above approach is implemented below:

## C/C++

 `// C++ program to get index of array element in ` `// sorted array ` `#include ` `using` `namespace` `std; ` ` `  `// Method returns the position of arr[idx] after ` `// performing stable-sort on array ` `int` `getIndexInSortedArray(``int` `arr[], ``int` `n, ``int` `idx) ` `{ ` `    ``/*  Count of elements smaller than current ` `        ``element plus the equal element occurring ` `        ``before given index*/` `    ``int` `result = 0; ` `    ``for` `(``int` `i = 0; i < n; i++) { ` `        ``// If element is smaller then increase ` `        ``// the smaller count ` `        ``if` `(arr[i] < arr[idx]) ` `            ``result++; ` ` `  `        ``// If element is equal then increase count ` `        ``// only if it occurs before ` `        ``if` `(arr[i] == arr[idx] && i < idx) ` `            ``result++; ` `    ``} ` `    ``return` `result; ` `} ` ` `  `// Driver code to test above methods ` `int` `main() ` `{ ` `    ``int` `arr[] = { 3, 4, 3, 5, 2, 3, 4, 3, 1, 5 }; ` `    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr); ` ` `  `    ``int` `idxOfEle = 5; ` `    ``cout << getIndexInSortedArray(arr, n, idxOfEle); ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java program to get index of array ` `// element in sorted array ` ` `  `class` `ArrayIndex { ` ` `  `    ``// Method returns the position of ` `    ``// arr[idx] after performing stable-sort ` `    ``// on array ` `    ``static` `int` `getIndexInSortedArray(``int` `arr[], ` `                                     ``int` `n, ``int` `idx) ` `    ``{ ` `        ``/*  Count of elements smaller than  ` `        ``current element plus the equal element ` `        ``occurring before given index*/` `        ``int` `result = ``0``; ` `        ``for` `(``int` `i = ``0``; i < n; i++) { ` ` `  `            ``// If element is smaller then ` `            ``// increase the smaller count ` `            ``if` `(arr[i] < arr[idx]) ` `                ``result++; ` ` `  `            ``// If element is equal then increase ` `            ``// count only if it occurs before ` `            ``if` `(arr[i] == arr[idx] && i < idx) ` `                ``result++; ` `        ``} ` `        ``return` `result; ` `    ``} ` ` `  `    ``// Driver code to test above methods ` `    ``public` `static` `void` `main(String[] args) ` `    ``{ ` `        ``int` `arr[] = { ``3``, ``4``, ``3``, ``5``, ``2``, ``3``, ``4``, ``3``, ``1``, ``5` `}; ` `        ``int` `n = arr.length; ` ` `  `        ``int` `idxOfEle = ``5``; ` `        ``System.out.println(getIndexInSortedArray(arr, ` `                                                 ``n, idxOfEle)); ` `    ``} ` `} ` ` `  `// This code is contributed by Raghav sharma `

## Python

 `# Python program to get index of array element in ` `# sorted array ` `# Method returns the position of arr[idx] after ` `# performing stable-sort on array ` ` `  `def` `getIndexInSortedArray(arr, n, idx): ` `       ``# Count of elements smaller than current ` `       ``# element plus the equal element occurring ` `       ``# before given index ` `    ``result ``=` `0` `    ``for` `i ``in` `range``(n): ` `        ``# If element is smaller then increase ` `        ``# the smaller count ` `        ``if` `(arr[i] < arr[idx]): ` `            ``result ``+``=` `1` `  `  `        ``# If element is equal then increase count ` `        ``# only if it occurs before ` `        ``if` `(arr[i] ``=``=` `arr[idx] ``and` `i < idx): ` `            ``result ``+``=` `1` `    ``return` `result; ` `  `  `# Driver code to test above methods ` `arr ``=` `[``3``, ``4``, ``3``, ``5``, ``2``, ``3``, ``4``, ``3``, ``1``, ``5``] ` `n ``=` `len``(arr) ` ` `  `idxOfEle ``=` `5` `print` `getIndexInSortedArray(arr, n, idxOfEle) ` ` `  `# Contributed by: Afzal Ansari `

## C#

 `// C# program to get index of array ` `// element in sorted array ` `using` `System; ` ` `  `class` `ArrayIndex { ` `     `  `    ``// Method returns the position of ` `    ``// arr[idx] after performing stable-sort ` `    ``// on array ` `    ``static` `int` `getIndexInSortedArray(``int``[] arr, ` `                                     ``int` `n, ``int` `idx) ` `    ``{ ` `        ``/* Count of elements smaller than  ` `        ``current element plus the equal element ` `        ``occurring before given index*/` `        ``int` `result = 0; ` `        ``for` `(``int` `i = 0; i < n; i++) { ` `             `  `            ``// If element is smaller then ` `            ``// increase the smaller count ` `            ``if` `(arr[i] < arr[idx]) ` `                ``result++; ` ` `  `            ``// If element is equal then increase ` `            ``// count only if it occurs before ` `            ``if` `(arr[i] == arr[idx] && i < idx) ` `                ``result++; ` `        ``} ` `        ``return` `result; ` `    ``} ` ` `  `    ``// Driver code to test above methods ` `    ``public` `static` `void` `Main() ` `    ``{ ` `        ``int``[] arr = { 3, 4, 3, 5, 2, 3, 4, 3, 1, 5 }; ` `        ``int` `n = arr.Length; ` ` `  `        ``int` `idxOfEle = 5; ` `        ``Console.WriteLine(getIndexInSortedArray(arr, n,  ` `                                            ``idxOfEle)); ` `    ``} ` `} ` ` `  `// This code is contributed by vt_m `

## PHP

 ` `

Output:

```4
```

This article is contributed by Utkarsh Trivedi. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.

My Personal Notes arrow_drop_up

Improved By : vt_m

Article Tags :
Practice Tags :

4

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.