# Python program to find k'th smallest element in a 2D array

PythonServer Side ProgrammingProgramming

#### Beyond Basic Programming - Intermediate Python

Most Popular

36 Lectures 3 hours

#### Practical Machine Learning using Python

Best Seller

91 Lectures 23.5 hours

#### Practical Data Science using Python

22 Lectures 6 hours

One n×n user input integer matrix is given and the value of k. Our task is to find out k'th smallest element in a 2D array. Here we use heapq mudule.Heap queue (or heapq) in Python. In Python, it is available using “heapq” module. The technique of this module in python is that each time the smallest of heap element is popped (min heap).nsmallest () method is used to get n least values from a data frame or a series.

## Example

Input Array is::
10 20 20 40
15 45 40 30
32 33 30 50
12 78 99 78
The value of k is 10
10 th smallest element is 40


## Algorithm

Step 1: First create a 2D array.
Step 2: Then assign first row to a variable and convert it into min heap.
Step 3: Then traverse remaining rows and push elements in min heap.
Step 4: Now use nsmallest(k, iterable) method of heapq module and get list of first k smallest element, nsmallest(k,list) method returns first k smallest element now print last element of that list.


## Example Code

# python program to find K'th smallest element in
# a 2D array in Python
import heapq

def smallestele(A):
assignval = A[0]
heapq.heapify(assignval)

for i in A[1:]:
for j in i:
heapq.heappush(assignval,j)
mini = heapq.nsmallest(k,assignval)
print (k,"th smallest element is ",mini[-1])

# Driver program
if __name__ == "__main__":
A=[]
n=int(input("Enter N for N x N matrix : "))      #3 here
#use list for storing 2D array
#get the user input and store it in list (here IN : 1 to 9)
print("Enter the element ::>")
for i in range(n):
row=[]                                        #temporary list to store the row
for j in range(n):
row.append(int(input()))                   #add the input to row list
A.append(row)                                 #add the row to the list

print(A)
# [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

#Display the 2D array
print("Display Array In Matrix Form")
for i in range(n):
for j in range(n):
print(A[i][j], end=" ")
print()                                       #new line
k = int(input("Enter the kth position ::>"))
smallestele(A)


## Output

Enter N for N x N matrix : 4
Enter the element ::>
10
20
20
40
15
45
40
30
32
33
30
50
12
78
99
78
[[10, 20, 20, 40], [15, 45, 40, 30], [32, 33, 30, 50], [12, 78, 99, 78]]
Display Array In Matrix Form
10 20 20 40
15 45 40 30
32 33 30 50
12 78 99 78
Enter the kth position ::>10
10 th smallest element is 40

Updated on 30-Jul-2019 22:30:23