algokit-py 0.1.0__py3-none-any.whl → 0.3.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
algokit_py/__init__.py CHANGED
@@ -3,6 +3,6 @@ algokit_py - A minimal Python algorithms library
3
3
  """
4
4
 
5
5
  from algokit_py.search import binary_search, linear_search
6
+ from algokit_py.sort import insertion_sort, merge_sort
6
7
 
7
- __version__ = "0.1.0"
8
- __all__ = ["binary_search", "linear_search"]
8
+ __all__ = ["binary_search", "linear_search","insertion_sort","merge_sort"]
@@ -16,10 +16,11 @@ At every step, the algorithm maintains a range that is guaranteed to contain the
16
16
  from typing import Sequence, TypeVar
17
17
 
18
18
  T = TypeVar('T')
19
- # here we use Sequence because binary seach does not support for unindexed iterables
19
+ # here we use Sequence because binary search does not support for not indexed iterables.
20
+ # Binary search requires a sorted sequence.
20
21
  def binary_search(sequence: Sequence[T], target: T)-> int:
21
22
  """
22
- This function will perform the binary search
23
+ This function will perform the binary search. Sequence must be a sorted sequence
23
24
 
24
25
  :param sequence: sorted and indexed sequence
25
26
  :param target: value that you want to find
@@ -0,0 +1,4 @@
1
+ from .insertion import insertion_sort
2
+ from .merge import merge_sort
3
+
4
+ __all__ = ["insertion_sort", "merge_sort"]
@@ -0,0 +1,26 @@
1
+ from typing import MutableSequence, TypeVar
2
+
3
+ T = TypeVar('T')
4
+ def insertion_sort(sequence: MutableSequence[T])-> None:
5
+ """
6
+ At the start of iteration i, the subarray sequence[0:i] is sorted.
7
+
8
+ :param Mutable sequence
9
+ :return None
10
+
11
+ Worst Case Time Complexity: O(n²)
12
+ Space Complexity: O(1)
13
+ """
14
+ length = len(sequence)
15
+ for i in range(1, length):
16
+ key = sequence[i]
17
+ j = i-1
18
+ while sequence[j] > key and j >= 0:
19
+ sequence[j+1]= sequence[j]
20
+ j -= 1
21
+ sequence[j + 1] = key
22
+
23
+
24
+
25
+
26
+
@@ -0,0 +1,43 @@
1
+ from typing import Sequence, TypeVar
2
+
3
+ T = TypeVar('T')
4
+
5
+ def merge_sort(sequence: Sequence[T]) -> list[T]:
6
+ """
7
+ Merge sort implementation.
8
+
9
+ Base case:
10
+ - Sequences of length 0 or 1 are already sorted.
11
+
12
+ Worst Case Time Complexity: O(n log n)
13
+ Space Complexity: O(n)
14
+ """
15
+ if len(sequence) <= 1:
16
+ return list(sequence)
17
+
18
+ middle = len(sequence) // 2
19
+ left = sequence[:middle]
20
+ right = sequence[middle:]
21
+
22
+ sorted_left = merge_sort(left)
23
+ sorted_right = merge_sort(right)
24
+
25
+ merged = []
26
+ i = j = 0
27
+
28
+ while i < len(sorted_left) and j < len(sorted_right):
29
+ if sorted_left[i] <= sorted_right[j]:
30
+ merged.append(sorted_left[i])
31
+ i += 1
32
+ else:
33
+ merged.append(sorted_right[j])
34
+ j += 1
35
+
36
+ merged.extend(sorted_left[i:])
37
+ merged.extend(sorted_right[j:])
38
+
39
+ return merged
40
+
41
+
42
+
43
+
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: algokit-py
3
- Version: 0.1.0
4
- Summary: A minimal Python algorithms library with clean implementations of search algorithms
3
+ Version: 0.3.0
4
+ Summary: A minimal Python algorithms library with clean implementations of search algorithms and sort algorithms
5
5
  Author: Chanaka Prasanna
6
6
  License: MIT
7
7
  Classifier: Programming Language :: Python :: 3
@@ -12,14 +12,28 @@ Description-Content-Type: text/markdown
12
12
 
13
13
  # algokit-py
14
14
 
15
- A lightweight Python algorithms library with clean, well-documented implementations.
15
+ A lightweight Python algorithms library with clean, well-documented, and tested implementations.
16
+ Designed for learning, interviews, and real-world algorithm reasoning.
16
17
 
17
18
  ## Features
19
+
20
+ ### Search Algorithms
18
21
  - Linear Search
19
- - Binary Search
22
+ - Binary Search (iterative, invariant-based)
23
+
24
+ ### Sorting Algorithms
25
+ - Insertion Sort (in-place, stable)
26
+ - Merge Sort (divide-and-conquer, O(n log n))
20
27
 
21
28
  ## Usage
22
29
 
30
+ ### Install
31
+
32
+ ```python
33
+ pip install algokit-py
34
+ ```
35
+
36
+ ### Search
23
37
  ```python
24
38
  from algokit_py.search import linear_search, binary_search
25
39
 
@@ -27,26 +41,14 @@ print(linear_search([1, 2, 3], 2))
27
41
  print(binary_search([1, 2, 3], 2))
28
42
  ```
29
43
 
44
+ ### Sorting
45
+ ```python
46
+ from algokit_py.sort import insertion_sort, merge_sort
30
47
 
31
- We will improve this later.
32
-
33
- ---
34
-
35
- ## STEP 6: Local Install Test (Very Important)
36
-
37
- From **project root**:
38
-
39
- ```powershell
40
- pip install -e .
41
- ```
42
-
43
- Then test:
48
+ data = [3, 1, 2]
44
49
 
45
- ```powershell
46
- python -c "from algokit_py.search import binary_search; print(binary_search([1,2,3], 2))"
47
- ```
50
+ insertion_sort(data)
51
+ print(data) # [1, 2, 3]
48
52
 
49
- You must see:
50
- ```python
51
- 1
53
+ print(merge_sort([3, 1, 2])) # [1, 2, 3]
52
54
  ```
@@ -0,0 +1,11 @@
1
+ algokit_py/__init__.py,sha256=oo3K29kYB3Ltr-YAwuyN0sSZ85W13FeJo9kFkvIA0a0,256
2
+ algokit_py/search/__init__.py,sha256=0xreC43bjUH_VRqJTv48VbPadrY4GQgP7y3PMQ5RR04,118
3
+ algokit_py/search/binary.py,sha256=y9EXEK2wlFuMU6wQfddrESe4CkL2umfH7K0Vl33vW9g,1421
4
+ algokit_py/search/linear.py,sha256=07bjqKVarTmYiC0Uw-Pg_EuNRcsAD4zsn9lfuprTJAc,451
5
+ algokit_py/sort/__init__.py,sha256=p0TJO8Ou2upoGVh9-sx2sTxKZ1YwUgIiIgTLIT8eE8I,114
6
+ algokit_py/sort/insertion.py,sha256=CFKnfZESHlwa26TrCjTMZ4pGSPyxAWdwO9CFCwBj1Uo,582
7
+ algokit_py/sort/merge.py,sha256=fyyZhGVqhVIV82oj55IkaG9rGDUvdDCKE6nvD5deNEE,926
8
+ algokit_py-0.3.0.dist-info/METADATA,sha256=aCfDmgNamUeyeGPivkPiHCDeKMcB6pr2381cfMSBsMw,1261
9
+ algokit_py-0.3.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
10
+ algokit_py-0.3.0.dist-info/top_level.txt,sha256=OqfCkcr7SFcMZHBQVKnTOy6Plaoq8t0A8M4CN6Hca0w,11
11
+ algokit_py-0.3.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.9.0)
2
+ Generator: setuptools (80.10.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,8 +0,0 @@
1
- algokit_py/__init__.py,sha256=xhI99pue6hsmyVVOCd60YTglScw-RcWssAdGBUg3yNY,193
2
- algokit_py/search/__init__.py,sha256=0xreC43bjUH_VRqJTv48VbPadrY4GQgP7y3PMQ5RR04,118
3
- algokit_py/search/binary.py,sha256=3VZ0ZMtANDProjkGZkX1NUpZZPmwfZF5CevpeJ-Bd-Q,1336
4
- algokit_py/search/linear.py,sha256=07bjqKVarTmYiC0Uw-Pg_EuNRcsAD4zsn9lfuprTJAc,451
5
- algokit_py-0.1.0.dist-info/METADATA,sha256=E8L-a1xjSM5L-SJoVaQZ7U1kepUg2mB_jvxRDhkPjwo,1041
6
- algokit_py-0.1.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
7
- algokit_py-0.1.0.dist-info/top_level.txt,sha256=OqfCkcr7SFcMZHBQVKnTOy6Plaoq8t0A8M4CN6Hca0w,11
8
- algokit_py-0.1.0.dist-info/RECORD,,