Skip to content

Commit 8be21c1

Browse files
adding timsort and BIG Os
1 parent 4f35740 commit 8be21c1

File tree

8 files changed

+122
-0
lines changed

8 files changed

+122
-0
lines changed

bubblesort.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@
33
# by Tarcisio marinho
44
# github.com/tarcisio-marinho
55

6+
''' BIG O
7+
melhor caso - O(n)
8+
caso comum - O(n^2)
9+
pior caso - O(n^2)
10+
'''
11+
612
def bubble_sort(lista, n):
713
i = 0
814
while(i < n-1):

insertionsort.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@
33
# by Tarcisio marinho
44
# github.com/tarcisio-marinho
55

6+
''' BIG O
7+
melhor caso - O(n)
8+
caso comum - O(n^2)
9+
pior caso - O(n^2)
10+
'''
11+
612
def insertion_sort(lista, n):
713
p = 1
814
while(p<n):

mergesort.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@
33
# by Tarcisio marinho
44
# github.com/tarcisio-marinho
55

6+
''' BIG O
7+
melhor caso - O(n log(n))
8+
caso comum - O(n log(n))
9+
pior caso - O(n log(n))
10+
'''
11+
612
def merge_sort(obj):
713
if len(obj) > 1:
814
mid = len(obj)/2

quicksort.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@
33
# by Tarcisio marinho
44
# github.com/tarcisio-marinho
55

6+
''' BIG O
7+
melhor caso - O(n log(n))
8+
caso comum - O(n log(n))
9+
pior caso - O(n^2)
10+
'''
11+
612
def partition(lista, esq, dir, pivot):
713
while(esq <= dir):
814
while(lista[esq] < pivot):

selectionsort.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@
33
# by Tarcisio marinho
44
# github.com/tarcisio-marinho
55

6+
''' BIG O
7+
melhor caso - O(n^2)
8+
caso comum - O(n^2)
9+
pior caso - O(n^2)
10+
'''
11+
612
def selection_sort(lista, n):
713
i = 0
814
while(i<n):

shellsort.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@
33
# by Tarcisio marinho
44
# github.com/tarcisio-marinho
55

6+
''' BIG O
7+
melhor caso - O(n)
8+
caso comum - O((n log(n)) ^ 2)
9+
pior caso - O((n log(n)) ^ 2)
10+
'''
11+
612
def shell_sort(lista, n, inc, num):
713
num-=1
814
while(num >= 0):

tests.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@
77
from quicksort import quick_sort
88
from selectionsort import selection_sort
99
from insertionsort import insertion_sort
10+
from mergesort import merge_sort
11+
from bubblesort import bubble_sort
12+
from timsort import tim_sort
13+
1014

1115
def quick_vs_tim():
1216
# PIOR CASO

timsort.py

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
#!/bin/bash/env python
2+
# coding=UTF-8
3+
# by Tarcisio marinho
4+
# github.com/tarcisio-marinho
5+
6+
# based on insertion sort and merge sort
7+
8+
''' BIG O
9+
melhor caso - O(n)
10+
caso comum - O(n log(n))
11+
pior caso - O(n log(n))
12+
'''
13+
14+
def insertion_sort(lista, esq, dir):
15+
i = esq + 1
16+
while(i <= dir):
17+
temp = lista[i]
18+
19+
j = i - 1
20+
while(lista[j] > temp and j >= esq):
21+
lista[j + 1] = lista[j]
22+
j-=1
23+
lista[j + 1] = temp
24+
i+=1
25+
26+
def merge(lista, l, m, r):
27+
len1 = m - l + 1
28+
len2 = r - m
29+
left = []
30+
right = []
31+
for i in range(len1 + 1):
32+
left[i] = lista[l + i]
33+
for i in range(len2 + 1):
34+
right[i] = lista[m + l + i]
35+
36+
i = 0
37+
j = 0
38+
k = l
39+
while(i < len1 and j < len2):
40+
if(left[i] <= right[j]):
41+
lista[k] = left[i]
42+
i+=1
43+
else:
44+
lista[k] = right[j]
45+
j+=1
46+
k+=1
47+
48+
while(i < len1):
49+
lista[k] = left[i]
50+
k+=1
51+
i+=1
52+
53+
while(j < len2):
54+
lista[k] = right[j]
55+
k+=1
56+
j+=1
57+
58+
59+
60+
61+
def tim_sort(lista, n):
62+
i = 0
63+
while(i < n):
64+
insertion_sort(lista, i, min((i+31), (n-1)))
65+
i+=32
66+
67+
size = 32
68+
while(size < n):
69+
left = 0
70+
while(left < n):
71+
mid = left + size -1
72+
right = min((left + 2*size - 1), (n-1))
73+
74+
merge(lista, left, mid, right)
75+
76+
left+= 2*size
77+
78+
size = 2*size
79+
80+
lista = [30, 2, 1, 56, 32, 13, 4]
81+
tim_sort(lista, len(lista))
82+
print(lista)

0 commit comments

Comments
 (0)