Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@

# Algorythm

Kapralov Nikita

```shell
pip install pipenv
```
Expand Down
18 changes: 13 additions & 5 deletions src/sorting/bubble_sort.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
doctest.testmod(verbose=True)
14 changes: 14 additions & 0 deletions src/sorting/different_count.py
Original file line number Diff line number Diff line change
@@ -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)
46 changes: 46 additions & 0 deletions src/sorting/inversions_count.py
Original file line number Diff line number Diff line change
@@ -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)
34 changes: 20 additions & 14 deletions src/sorting/merge_sort.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
50 changes: 50 additions & 0 deletions src/sorting/pair_sort.py
Original file line number Diff line number Diff line change
@@ -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)
53 changes: 0 additions & 53 deletions src/sorting/radix_sort.py

This file was deleted.

33 changes: 33 additions & 0 deletions src/sorting/storage.py
Original file line number Diff line number Diff line change
@@ -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)