# Find index of first occurrence when an unsorted array is sorted

Given an unsorted array and a number x, find an index of first occurrence of x when we sort the array. If x is not present, print -1.

Examples:

Input : arr[] = {10, 30, 20, 50, 20}
x = 20
Output : 1
Sorted array is {10, 20, 20, 30, 50}

Input : arr[] = {10, 30, 20, 50, 20}
x = 60
Output : -1
60 is not present in array.

A simple solution is to first sort the array, then do binary search to find first occurrence.

Implementation:

## C++

 // C++ program to find index of first// occurrence of x when array is sorted.#include using namespace std; int findFirst(int arr[], int n, int x){    sort(arr, arr + n);     // lower_bound returns iterator pointing to    // first element that does not compare less    // to x.    int* ptr = lower_bound(arr, arr + n, x);     // If x is not present return -1.    return (*ptr != x) ? -1 : (ptr - arr);} int main(){    int x = 20, arr[] = { 10, 30, 20, 50, 20 };    int n = sizeof(arr) / sizeof(arr[0]);    cout << findFirst(arr, n, x);    return 0;}

## Java

 // Java program to find index of first// occurrence of x when array is sorted.import java.util.*; class GFG {    static int findFirst(int arr[], int n, int x)    {        Arrays.sort(arr);         // lower_bound returns iterator pointing to        // first element that does not compare less        // to x.        int ptr = lowerBound(arr, 0, n, x);         // If x is not present return -1.        return (arr[ptr] != x) ? -1 : (ptr);    }     static int lowerBound(int[] a, int low, int high,                          int element)    {        while (low < high) {            int middle = low + (high - low) / 2;            if (element > a[middle])                low = middle + 1;            else                high = middle;        }        return low;    }     // Driver Code    public static void main(String[] args)    {        int x = 20, arr[] = { 10, 30, 20, 50, 20 };        int n = arr.length;        System.out.println(findFirst(arr, n, x));    }} // This code is contributed by 29AjayKumar

## Python3

 # Python3 program to find index of first# occurrence of x when array is sorted.import math  def findFirst(arr, n, x):    arr.sort()     # lower_bound returns iterator pointing to    # first element that does not compare less    # to x.    ptr = lowerBound(arr, 0, n, x)     # If x is not present return -1.    return 1 if (ptr != x) else (ptr - arr)  def lowerBound(a, low, high, element):    while(low < high):        middle = low + (high - low) // 2        if(element > a[middle]):            low = middle + 1        else:            high = middle    return low  # Driver Codeif __name__ == '__main__':    x = 20    arr = [10, 30, 20, 50, 20]    n = len(arr)    print(findFirst(arr, n, x)) # This code is contributed by Rajput-Ji

## C#

 // C# program to find index of first// occurrence of x when array is sorted.using System; class GFG {    static int findFirst(int[] arr, int n, int x)    {        Array.Sort(arr);         // lower_bound returns iterator pointing to        // first element that does not compare less        // to x.        int ptr = lowerBound(arr, 0, n, x);         // If x is not present return -1.        return (arr[ptr] != x) ? -1 : (ptr);    }     static int lowerBound(int[] a, int low, int high,                          int element)    {        while (low < high) {            int middle = low + (high - low) / 2;            if (element > a[middle])                low = middle + 1;            else                high = middle;        }        return low;    }     // Driver Code    static public void Main()    {        int x = 20;        int[] arr = { 10, 30, 20, 50, 20 };        int n = arr.Length;        Console.Write(findFirst(arr, n, x));    }} // This code is contributed by ajit.

## PHP



## Javascript



Output
1

Complexity Analysis:

• Time Complexity : O(n Log n)
• Auxiliary Space: O(1)

An efficient solution is to simply count smaller elements than x.

Implementation:

## C++

 // C++ program to find index of first// occurrence of x when array is sorted.#include using namespace std; int findFirst(int arr[], int n, int x){    int count = 0;    bool isX = false;    for (int i = 0; i < n; i++) {        if (arr[i] == x)            isX = true;        else if (arr[i] < x)            count++;    }    return (isX == false) ? -1 : count;} int main(){    int x = 20, arr[] = { 10, 30, 20, 50, 20 };    int n = sizeof(arr) / sizeof(arr[0]);    cout << findFirst(arr, n, x);    return 0;}

## Java

 // Java program to find index of first// occurrence of x when array is sorted. public class GFG {     static int findFirst(int arr[], int n, int x)    {        int count = 0;        boolean isX = false;        for (int i = 0; i < n; i++) {            if (arr[i] == x) {                isX = true;            }            else if (arr[i] < x) {                count++;            }        }        return (isX == false) ? -1 : count;    }     // Driver main    public static void main(String[] args)    {        int x = 20, arr[] = { 10, 30, 20, 50, 20 };        int n = arr.length;        System.out.println(findFirst(arr, n, x));    }}/*This code is contributed by PrinciRaj1992*/

## Python3

 # Python 3 program to find index# of first occurrence of x when# array is sorted.  def findFirst(arr, n, x):     count = 0    isX = False    for i in range(n):        if (arr[i] == x):            isX = True        elif (arr[i] < x):            count += 1     return -1 if(isX == False) else count  # Driver Codeif __name__ == "__main__":    x = 20    arr = [10, 30, 20, 50, 20]    n = len(arr)    print(findFirst(arr, n, x)) # This code is contributed# by ChitraNayal

## C#

 // C# program to find index of first// occurrence of x when array is sorted.using System; public class GFG {     static int findFirst(int[] arr, int n, int x)    {        int count = 0;        bool isX = false;        for (int i = 0; i < n; i++) {            if (arr[i] == x) {                isX = true;            }            else if (arr[i] < x) {                count++;            }        }        return (isX == false) ? -1 : count;    }     // Driver main    public static void Main()    {        int x = 20;        int[] arr = { 10, 30, 20, 50, 20 };        int n = arr.Length;        Console.WriteLine(findFirst(arr, n, x));    }}/*This code is contributed by PrinciRaj1992*/

## PHP



## Javascript



Output
1

Complexity Analysis:

• Time Complexity: O(N)
• Auxiliary Space: O(1)

Previous
Next