Last Updated : 23 Jul, 2025
Bitonic Sequence: A sequence is called Bitonic if it is first increasing, then decreasing. In other words, an array arr[0..n-i] is Bitonic if there exists an index i where 0<=i<=n-1 such that
x0 <= x1 …..<= xi and xi >= xi+1….. >= xn-1
Bitonic Sorting: It mainly involves two steps.
Example:
Python3
# Python program for Bitonic Sort. Note that this program
# works only when size of input is a power of 2.
# The parameter dir indicates the sorting direction, ASCENDING
# or DESCENDING; if (a[i] > a[j]) agrees with the direction,
# then a[i] and a[j] are interchanged.*/
def compAndSwap(a, i, j, dire):
if (dire == 1 and a[i] > a[j]) or (dire == 0 and a[i] > a[j]):
a[i], a[j] = a[j], a[i]
# It recursively sorts a bitonic sequence in ascending order,
# if dir = 1, and in descending order otherwise (means dir=0).
# The sequence to be sorted starts at index position low,
# the parameter cnt is the number of elements to be sorted.
def bitonicMerge(a, low, cnt, dire):
if cnt > 1:
k = cnt//2
for i in range(low, low+k):
compAndSwap(a, i, i+k, dire)
bitonicMerge(a, low, k, dire)
bitonicMerge(a, low+k, k, dire)
# This function first produces a bitonic sequence by recursively
# sorting its two halves in opposite sorting orders, and then
# calls bitonicMerge to make them in the same order
def bitonicSort(a, low, cnt, dire):
if cnt > 1:
k = cnt//2
bitonicSort(a, low, k, 1)
bitonicSort(a, low+k, k, 0)
bitonicMerge(a, low, cnt, dire)
# Caller of bitonicSort for sorting the entire array of length N
# in ASCENDING order
def sort(a, N, up):
bitonicSort(a, 0, N, up)
# Driver code to test above
a = [3, 7, 4, 8, 6, 2, 1, 5]
n = len(a)
up = 1
sort(a, n, up)
print("Sorted array is")
for i in range(n):
print("%d" % a[i], end=" ")
Sorted array is 1 5 2 6 3 7 4 8
Time Complexity: O(n*log2(n))
Auxiliary Space: O(n*log2(n))
The provided Python code implements the Bitonic Sort algorithm, which is designed for power-of-two-sized sequences. It sorts a sequence in bitonic order, where elements are first arranged in ascending order up to a certain point, and then arranged in descending order. The code includes three main functions: compAndSwap to compare and swap elements based on the sorting direction, bitonicMerge to merge bitonic sequences, and bitonicSort to recursively sort bitonic sequences. The sort function serves as a wrapper to initiate the sorting process. The driver code initializes an array, applies the sorting process, and prints the sorted array. Bitonic Sort's time complexity is O(n log^2 n), suitable for parallel processing on some architectures.
Please refer complete article on Bitonic Sort for more details!
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4