mirror of
https://github.com/TheAlgorithms/Python.git
synced 2025-01-18 16:27:02 +00:00
Create BitonicSort.py (#386)
This commit is contained in:
parent
1cbbd5fe1a
commit
a0d5c9aaf0
56
sorts/BitonicSort.py
Normal file
56
sorts/BitonicSort.py
Normal file
|
@ -0,0 +1,56 @@
|
|||
# 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 = int(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 funcion 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 = int(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 = []
|
||||
|
||||
n = int(input())
|
||||
for i in range(n):
|
||||
a.append(int(input()))
|
||||
up = 1
|
||||
|
||||
sort(a, n, up)
|
||||
print("\n\nSorted array is")
|
||||
for i in range(n):
|
||||
print("%d" % a[i])
|
Loading…
Reference in New Issue
Block a user