Skip to content
Related Articles

Related Articles

Improve Article

Find index of first occurrence when an unsorted array is sorted

  • Difficulty Level : Basic
  • Last Updated : 20 May, 2021

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++




// 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




// 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 Code
if __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




<?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.
?>

Javascript




<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 code
let 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)



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

C++




// 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




// 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 Code
if __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




<?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
?>

Javascript




<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 Code
var 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) 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.




My Personal Notes arrow_drop_up
Recommended Articles
Page :