Find index of first occurrence when an unsorted array is sorted

23 May, 2022
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.
C++
Java
Python3
C#
PHP
Javascript
// C++ program to find index of first// occurrence of x when array is sorted.#include <bits/stdc++.h>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 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 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# 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//PHP program to find index of first// occurrence of x when array is sorted. function findFirst( $arr, $n, $x){    sort($arr); // lower_bound returns iterator pointing to// first element that does not compare less// to x.$ptr = floor($arr);     // If x is not present return -1.return ($ptr != $x)? 1 : ($ptr - $arr);}//Code driven    $x = 20;    $arr = array(10, 30, 20, 50, 20);    $n = sizeof($arr)/sizeof($arr[0]);    echo findFirst($arr, $n, $x);     #This code is contributed by Tushil.?>
<script> // Javascript program to find index of first// occurrence of x when array is sorted.function findFirst(arr, n, x){    arr.sort();     // lower_bound returns iterator pointing    // to first element that does not compare    // less to x.    let ptr = lowerBound(arr, 0, n, x);     // If x is not present return -1.    return (arr[ptr] != x) ? -1 : (ptr);} function lowerBound(a, low, high, element){    while (low < high)    {        let middle = low + parseInt(                   (high - low) / 2, 10);                             if (element > a[middle])            low = middle + 1;        else            high = middle;    }    return low;} // Driver codelet x = 20;let arr = [ 10, 30, 20, 50, 20 ];let n = arr.length; document.write(findFirst(arr, n, x)); // This code is contributed by mukesh07 </script>
Output: 
1
Time Complexity : O(n Log n)
Auxiliary Space: O(1)
An efficient solution is to simply count smaller elements than x. 
C++
Java
Python3
C#
PHP
Javascript
// C++ program to find index of first// occurrence of x when array is sorted.#include <bits/stdc++.h>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 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*/
# 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# 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// PHP program to find index of first// occurrence of x when array is sorted. function findFirst($arr, $n, $x){    $count = 0;    $isX = false;    for ($i = 0; $i < $n; $i++)    {        if ($arr[$i] == $x)            $isX = true;        else if ($arr[$i] < $x)            $count++;    }    return ($isX == false)? -1 : $count;} // Driver Code$x = 20;$arr = array(10, 30, 20, 50, 20);$n = sizeof($arr);echo findFirst($arr, $n, $x); // This code is contributed// by Akanksha Rai?>
<script> // JavaScript program to find index of first// occurrence of x when array is sorted.function findFirst(arr, n, x){    var count = 0;    var isX = false;         for(var i = 0; i < n; i++)    {        if (arr[i] == x)        {            isX = true;        }        else if (arr[i] < x)        {            count++;        }    }    return (isX == false) ? -1 : count;} // Driver Codevar x = 20, arr = [ 10, 30, 20, 50, 20 ];var n = arr.length; document.write(findFirst(arr, n, x)); // This code is contributed by Khushboogoyal499 </script>
Output: 
1
Time Complexity: O(N) Auxiliary Space: O(1) 
ukasp
Akanksha_Rai
princiraj1992
jit_t
29AjayKumar
Rajput-Ji
aashish999
mukesh07
khushboogoyal499
jayanth_mkv
Binary Search
Arrays
Searching
Arrays
Searching
Binary Search
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.