Find index of first occurrence when an unsorted array is sorted

Given an unsorted array and a number x, find 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 = 50
Output : -1
50 is not present in array.

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

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right



Output :

1

Time Complexity : O(n Log n)

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

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Python 3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right



Output :

1

Time Complexity : O(n)



My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

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.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.