mirror of
https://github.com/TheAlgorithms/Python.git
synced 2025-01-19 00:37:02 +00:00
b7f13d991c
* Travis CI: Add type checking with mypy * Create requirements.txt * script: mypy --ignore-missing-stubs=cv2,numpy . * Delete requirements.txt * script: mypy --ignore-missing-imports . * Run doctests * Disable doctest -v other/detecting_english_programmatically.py * Pytest * No | * pytest || true * Run black doctest flake8 mypy pytest * after_success: Build Directory.md * Typo in filename: Dictionary.txt --> dictionary.txt' Discovered via doctest run in #964 * python -m doctest -v * pip install black flake8 mypy pytest * pytest --doctest-glob='*.py' * pytest --doctest-modules * pytest --doctest-modules ./sorts * pytest --doctest-modules ./ciphers ./other ./searches ./sorts ./strings || true * if __name__ == "__main__": * if __name__ == "__main__": * if __name__ == '__main__': * if __name__ == '__main__': * if __name__ == '__main__': * Create requirements.txt * Update requirements.txt * if __name__ == "__main__": * Lose the doctests * if __name__ == '__main__': * Remove print-a-tuple * doctest: Added missing spaces * Update tabu_search.py * The >>> are not doctests so change to >>) * Travis CI: Run black, doctest, flake8, mypy, and pytest * Link to the separate DIRECTORY.md file * Update README.md
58 lines
1.7 KiB
Python
58 lines
1.7 KiB
Python
# 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)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
# Driver code to test above
|
|
a = []
|
|
|
|
n = int(input().strip())
|
|
for i in range(n):
|
|
a.append(int(input().strip()))
|
|
up = 1
|
|
|
|
sort(a, n, up)
|
|
print("\n\nSorted array is")
|
|
for i in range(n):
|
|
print("%d" % a[i])
|