diff --git a/README.md b/README.md index fc90160..5989b71 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,8 @@ +# Algorythm + +Kapralov Nikita + ```shell pip install pipenv ``` diff --git a/src/sorting/bubble_sort.py b/src/sorting/bubble_sort.py index 05c97e4..6a39267 100644 --- a/src/sorting/bubble_sort.py +++ b/src/sorting/bubble_sort.py @@ -11,11 +11,19 @@ """ def bubble_sort(): - n = input() - inp_string = input() - str_lst = inp_string.split(" ") - print(str_lst) + n=int(input()) + cou=0 + mas=list(map(int,(input().split()))) + for i in range(n-1): + for j in range(n-i-1): + if mas[j]>mas[j+1]: + mas[j], mas[j+1] = mas[j+1], mas[j] + cou+=1 + print(" ".join(map(str,mas))) + if cou==0: + print(0) + if __name__ == "__main__": import doctest - doctest.testmod(verbose=True) \ No newline at end of file + doctest.testmod(verbose=True) diff --git a/src/sorting/different_count.py b/src/sorting/different_count.py new file mode 100644 index 0000000..0a4b45a --- /dev/null +++ b/src/sorting/different_count.py @@ -0,0 +1,14 @@ +''' +>>> import io, sys +>>> sys.stdin = io.StringIO(chr(10).join(['5','1 0 1 2 0'])) # input +>>> different_count() +3 +''' + +def different_count(): + n = int(input()) + print(len(set(map(int, input().split())))) + +if __name__ == '__main__': + import doctest + doctest.testmod(verbose=True) \ No newline at end of file diff --git a/src/sorting/inversions_count.py b/src/sorting/inversions_count.py new file mode 100644 index 0000000..ca2a799 --- /dev/null +++ b/src/sorting/inversions_count.py @@ -0,0 +1,46 @@ +''' +>>> import io, sys +>>> sys.stdin = io.StringIO(chr(10).join(['1','1'])) # input +>>> task_merge_sort_count() +0 +>>> sys.stdin = io.StringIO(chr(10).join(['2','3 1'])) # input +>>> task_merge_sort_count() +1 +>>> sys.stdin = io.StringIO(chr(10).join(['5','5 4 3 2 1'])) # input +>>> task_merge_sort_count() +10 +''' + +def merge(A, B): + res = [] + i = j = 0 + inversions = 0 + while i < len(A) and j < len(B): + if A[i] <= B[j]: + res.append(A[i]) + i += 1 + else: + res.append(B[j]) + j += 1 + inversions += (len(A) - i) + res += A[i:] + res += B[j:] + return res, inversions + +def merge_sort_count(A): + if len(A) <= 1: + return A, 0 + middle = int(len(A) / 2) + left, inversions_left = merge_sort_count(A[:middle]) + right, inversions_right = merge_sort_count(A[middle:]) + merged, inversions = merge(left, right) + inversions += inversions_left + inversions_right + return merged, inversions + +def task_merge_sort_count(): + n = int(input()) + print(merge_sort_count(list(map(int, input().split())))[1]) + +if __name__ == '__main__': + import doctest + doctest.testmod(verbose=True) \ No newline at end of file diff --git a/src/sorting/merge_sort.py b/src/sorting/merge_sort.py index 0012e8d..15f28d6 100644 --- a/src/sorting/merge_sort.py +++ b/src/sorting/merge_sort.py @@ -23,29 +23,35 @@ 3 5 1 3 1 5 1 5 1 2 3 4 5 ->>> print(merge([2,3,4],[1,2,3])) -[1, 2, 2, 3, 3, 4] """ def merge(A, B): res = [] + i = j = 0 + while i < len(A) and j < len(B): + if A[i] <= B[j]: + res.append(A[i]) + i += 1 + else: + res.append(B[j]) + j += 1 + res += A[i:] + res += B[j:] return res -def merge_sort(A): - if len(A) == 1: - return A - l = A[0:len(A)//2] - r = A[len(A)//2:] - l = merge_sort(l) - r = merge_sort(r) - print("{:d} {:d}".format(r[0], l[-1])) - return merge(l, r) +def merge_sort(A, begin, end): + if (end - begin) == 1: + return A[begin:end] + middle = int((begin + end) / 2) + left = merge_sort(A, begin, middle) + right = merge_sort(A, middle, end) + merged = merge(left, right) + print(begin + 1, end, merged[0], merged[-1]) + return merged def task_merge_sort(): n = int(input()) - arr = list(map(int, input().split(" "))) - res = merge_sort(arr) - print(" ".join(list(map(str,res)))) + print(*merge_sort(list(map(int, input().split())), 0, n)) if __name__ == "__main__": import doctest diff --git a/src/sorting/pair_sort.py b/src/sorting/pair_sort.py new file mode 100644 index 0000000..dea25f5 --- /dev/null +++ b/src/sorting/pair_sort.py @@ -0,0 +1,50 @@ +''' +>>> import io, sys +>>> sys.stdin = io.StringIO(chr(10).join([\ +'3',\ +'101 80',\ +'305 90',\ +'200 14',\ +])) +>>> pair_sort() +305 90 +101 80 +200 14 +>>> sys.stdin = io.StringIO(chr(10).join([\ +'3',\ +'20 80',\ +'30 90',\ +'25 90',\ +])) +>>> pair_sort() +25 90 +30 90 +20 80 +''' + +def compare(A, B): + if A[1] > B[1]: + return True + elif A[1] == B[1]: + return A[0] < B[0] + else: + return False + +def pair_sort(): + xs = [] + n = int(input()) + for _ in range(n): + xs.append(list(map(int, input().split()))) + for i in range(len(xs)): + x = xs[i] + j = i - 1 + while j >= 0 and compare(x, xs[j]): + xs[j + 1] = xs[j] + j -= 1 + xs[j + 1] = x + for x in xs: + print(*x) + +if __name__ == '__main__': + import doctest + doctest.testmod(verbose=True) \ No newline at end of file diff --git a/src/sorting/radix_sort.py b/src/sorting/radix_sort.py deleted file mode 100644 index 1313bd8..0000000 --- a/src/sorting/radix_sort.py +++ /dev/null @@ -1,53 +0,0 @@ -""" ->>> import io, sys ->>> sys.stdin = io.StringIO(chr(10).join(['9',\ -'12',\ -'32',\ -'45',\ -'67',\ -'98',\ -'29',\ -'61',\ -'35',\ -'09',\ -])) ->>> radix() -Initial array: -12, 32, 45, 67, 98, 29, 61, 35, 09 -********** -Phase 1 -Bucket 0: empty -Bucket 1: 61 -Bucket 2: 12, 32 -Bucket 3: empty -Bucket 4: empty -Bucket 5: 45, 35 -Bucket 6: empty -Bucket 7: 67 -Bucket 8: 98 -Bucket 9: 29, 09 -********** -Phase 2 -Bucket 0: 09 -Bucket 1: 12 -Bucket 2: 29 -Bucket 3: 32, 35 -Bucket 4: 45 -Bucket 5: empty -Bucket 6: 61, 67 -Bucket 7: empty -Bucket 8: empty -Bucket 9: 98 -********** -Sorted array: -09, 12, 29, 32, 35, 45, 61, 67, 98 -""" -def radix(): - n = int(input()) - for i in range(n): - arr = input() - print(arr) - -if __name__ == "__main__": - import doctest - doctest.testmod(verbose=True) \ No newline at end of file diff --git a/src/sorting/storage.py b/src/sorting/storage.py new file mode 100644 index 0000000..79e0580 --- /dev/null +++ b/src/sorting/storage.py @@ -0,0 +1,33 @@ +''' +>>> import io, sys +>>> sys.stdin = io.StringIO(chr(10).join([\ +'5',\ +'1 50 3 4 3',\ +'16',\ +'1 2 3 4 5 1 3 3 4 5 5 5 5 5 4 5'\ +])) +>>> storage() +yes +no +no +no +yes +''' + +def storage(): + _ = int(input()) + products = list(map(int, input().split())) + _ = int(input()) + orders = list(map(int, input().split())) + sorted_orders = [0] * max(orders) + for item in orders: + sorted_orders[item - 1] += 1 + for i in range(len(products)): + if products[i] >= sorted_orders[i]: + print('no') + else: + print('yes') + +if __name__ == '__main__': + import doctest + doctest.testmod(verbose=True) \ No newline at end of file