Table of Contents

As the name suggests, a sorted array has all the elements sorted in a specific order, such as numerical or alphabetical order. One of the main advantages of the sorted array is that it makes the search operation very efficient. We can perform the lookup in `O(logn)`

time by applying the binary search algorithm. However, the time complexity of insertion and deletion is `O(n)`

as we have to shift items.

## How to Implement a Sorted Array?

def binarySearch(array, x, start, end): if (end < start): return -1 # x is not found mid = (start+end)//2 #find the mid if (x==array[mid]): #if x is equal to middle element return mid elif (x> array[mid]): # x lies in the upper half return binarySearch(array, x, mid+1, end) else: # x lies in the lower half return binarySearch(array, x, start, mid-1) def insert(array, x): n = len(array) if x>=array[n-1]: #add element at the end array.append(x) return array for i in range(0, n): if x < array[i]: sliced_array = array[i:] #copy the elements greater than x break array[i] = x #add x array[i+1:]=sliced_array #put the remaining elements return array def delete(array, x): n = len(array) index = binarySearch(array, x, 0, n-1) if index == -1: #element not found print("Element not found") return -1 if index == n-1: #deleting the last element return array[0: n-1] elif index ==0: #deleting the first element return array[1:n] else: left = array[0:index] #items before the index right = array[index+1:] #items after the index left.extend(right) #combining return left

## Operations on Sorted Arrays

### Search

As already mentioned, we perform the lookup operation using the binary search algorithm. The method checks if the given element is equal to the middle value, and in that case, its index gets returned. If it is greater than the middle value, it means that the element can lie in the upper half, so only that part gets considered. If it is less than the middle value, it can exist in the lower half.

scores = [50, 75.5, 85, 90, 91.5] n = len(scores) index = binarySearch(scores, 90, 0, n-1) if index!=1: print(f"Element found at index {index}")

**Output**

Element found at index 3

### Insertion

The `insert()`

method checks whether an element is greater than the last value or not. If it is, it will get appended to the list, and no shifting is required. Otherwise, it iterates through the array until it finds the greater than `x`

. The x will get inserted at that index, and the rest of the elements will get shifted. Therefore, we copy the rest of the items and break from the loop. Finally, we add `x`

at its position and put the remaining elements after that.

scores = [50, 75.5, 85, 90, 91.5] n = len(scores) scores = insert(scores, 100) scores = insert(scores, 49.6) scores = insert(scores, 70) print(scores)

**Output**

[49.6, 50, 70, 75.5, 85, 90, 91.5, 100]

### Delete

The `delete()`

method finds the index of the input element if it exists in the array, then removes it by slicing the array depending upon the itemâ€™s position.

scores = [50, 75.5, 85, 90, 91.5] n = len(scores) scores = delete(scores, 85) print(scores)

**Output**

[50, 75.5, 90, 91.5]

Concluding, sorted arrays are useful in those cases where the frequency of the lookup operation is more than insertion and deletion operations.