Lecture 3

This commit is contained in:
Oliver Hofmann committed 2024-04-22 15:39:10 +02:00
1 parent 5ec825647c
commit 2790f31141
4 files changed
+1038 -3

No files matched your search

+6
View File
@@ -329,6 +329,12 @@ def read_int_sequence(filename: str) -> AlgoDatArray:
a[i].value = l[i]
return a
def write_int_sequence(z: AlgoDatArray, filename: str):
with open(filename, "w") as file:
for i in range(len(z)):
file.write(str(z[i].value)+ '\n')
def read_int_sequence_limited(filename: str, limit: int) -> AlgoDatArray:
"""Reads a sequence of integers from a file and returns an AlgoDatArray object."""
with open(filename, "r") as file:
+2 -2
View File
@@ -6,8 +6,8 @@ import quick_sort as qs
if __name__ == "__main__":
filename = "../../seq3.txt"
dummy = read_int_sequence("../../seq3.txt")
filename = "../../seq3_sorted.txt"
dummy = read_int_sequence(filename)
n = len(dummy)
step = n // 100
+30 -1
View File
@@ -21,16 +21,45 @@ def partition(z: AlgoDatArray, left: int, right: int) -> int:
z[i], z[right] = z[right], z[i]
return i
def median_pivot(z: AlgoDatArray, left: int, right: int) -> int:
mid = left + (right - left) // 2
if z[left] < z[right]:
if z[mid] < z[right]:
# right is the largest
if z[mid] < z[left]:
# left is in the middle
z[left], z[right] = z[right], z[left]
else:
# mid is in the middle
z[mid], z[right] = z[right], z[mid]
else:
# right is in the middle
pass
else:
if z[mid] < z[right]:
# right is in the middle
pass
else:
#right is the smallest
if z[mid] < z[left]:
# mid is in the middle
z[mid], z[right] = z[right], z[mid]
else:
# mid is in the middle
z[left], z[right] = z[right], z[left]
return partition(z, left, right)
def quick_sort(z: AlgoDatArray, left: int, right: int):
if left < right:
q = partition(z, left, right)
#q = median_pivot(z, left, right)
quick_sort(z, left, q-1)
quick_sort(z, q+1, right)
pivot = AlgoDatValue(0)
if __name__ == "__main__":
z = read_int_sequence("../../seq0.txt")
z = read_int_sequence("../../seq3.txt")
print(z, len(z))
start = pfc()
quick_sort(z, 0, z.size-1)
+1000
View File
@@ -0,0 +1,1000 @@
-99
-99
-99
-99
-99
-99
-99
-99
-99
-99
-99
-98
-98
-98
-98
-98
-98
-98
-98
-98
-98
-98
-98
-98
-97
-97
-97
-97
-97
-96
-96
-96
-96
-96
-96
-96
-96
-96
-96
-96
-96
-95
-95
-95
-95
-95
-95
-95
-95
-95
-95
-95
-94
-94
-94
-94
-94
-94
-94
-94
-94
-94
-94
-93
-93
-93
-93
-93
-93
-93
-93
-92
-92
-92
-92
-92
-92
-92
-92
-92
-92
-92
-92
-92
-92
-92
-91
-91
-91
-91
-91
-91
-91
-91
-91
-90
-90
-90
-90
-90
-90
-90
-90
-90
-90
-90
-89
-89
-89
-89
-89
-89
-89
-89
-89
-89
-89
-89
-89
-89
-89
-89
-88
-88
-88
-88
-88
-88
-87
-87
-87
-87
-87
-87
-87
-87
-87
-86
-86
-86
-86
-86
-86
-86
-86
-86
-86
-86
-85
-85
-85
-85
-84
-84
-84
-84
-84
-84
-84
-84
-84
-84
-83
-83
-83
-83
-83
-83
-83
-83
-83
-82
-82
-82
-82
-82
-82
-82
-82
-82
-82
-82
-82
-81
-81
-81
-81
-81
-81
-81
-81
-81
-81
-81
-81
-80
-80
-80
-80
-80
-79
-79
-79
-79
-79
-79
-79
-79
-79
-79
-79
-78
-78
-78
-78
-78
-78
-78
-78
-78
-78
-77
-77
-77
-77
-77
-77
-77
-77
-77
-77
-77
-77
-77
-77
-77
-76
-76
-76
-76
-76
-76
-76
-76
-76
-76
-75
-75
-75
-75
-75
-75
-75
-75
-75
-75
-75
-75
-75
-75
-74
-74
-74
-74
-74
-74
-74
-74
-74
-74
-74
-74
-74
-74
-74
-74
-74
-73
-73
-73
-73
-73
-73
-73
-73
-73
-72
-72
-72
-72
-72
-72
-71
-71
-71
-71
-71
-71
-71
-71
-71
-71
-71
-70
-70
-70
-70
-70
-70
-70
-70
-70
-69
-69
-69
-69
-69
-69
-69
-69
-69
-69
-69
-69
-68
-68
-68
-68
-68
-68
-68
-67
-67
-67
-67
-67
-67
-67
-66
-66
-66
-66
-66
-66
-66
-66
-66
-65
-65
-65
-65
-65
-64
-64
-64
-64
-64
-64
-64
-64
-64
-64
-63
-63
-63
-63
-63
-63
-63
-63
-63
-63
-63
-62
-62
-62
-62
-62
-62
-62
-61
-61
-61
-61
-61
-61
-61
-61
-60
-60
-60
-60
-60
-60
-60
-60
-60
-60
-60
-60
-60
-60
-60
-60
-60
-60
-59
-59
-59
-59
-59
-59
-59
-59
-59
-58
-58
-58
-58
-58
-58
-58
-58
-58
-57
-57
-57
-57
-57
-57
-57
-57
-57
-57
-57
-56
-56
-56
-56
-56
-56
-56
-56
-56
-56
-55
-55
-55
-55
-55
-55
-55
-55
-55
-55
-54
-54
-54
-54
-54
-54
-54
-54
-54
-54
-54
-54
-53
-53
-53
-53
-53
-53
-53
-53
-52
-52
-52
-52
-52
-51
-51
-51
-50
-50
-50
-50
-50
-50
-50
-50
-50
-50
-50
-50
-50
-50
-50
-50
-49
-49
-49
-49
-49
-49
-49
-49
-49
-49
-49
-48
-48
-48
-48
-48
-48
-48
-48
-48
-48
-48
-48
-48
-48
-48
-48
-48
-48
-48
-48
-47
-47
-47
-47
-47
-47
-47
-47
-47
-47
-47
-47
-47
-47
-47
-46
-46
-46
-46
-46
-46
-46
-46
-46
-46
-46
-46
-45
-45
-45
-45
-45
-45
-45
-45
-45
-45
-45
-45
-44
-44
-44
-44
-44
-44
-44
-44
-44
-44
-44
-43
-43
-43
-43
-43
-43
-43
-43
-43
-43
-43
-43
-42
-42
-42
-42
-42
-42
-42
-42
-42
-42
-41
-41
-41
-41
-40
-40
-40
-40
-40
-40
-40
-40
-40
-39
-39
-39
-39
-39
-39
-39
-39
-39
-39
-39
-39
-39
-39
-39
-38
-38
-38
-38
-38
-38
-38
-38
-38
-38
-37
-37
-37
-37
-37
-37
-37
-36
-36
-36
-36
-36
-36
-36
-36
-35
-35
-35
-35
-35
-35
-34
-34
-34
-34
-34
-33
-33
-33
-33
-33
-33
-33
-32
-32
-32
-32
-32
-32
-32
-32
-32
-32
-32
-32
-31
-31
-31
-31
-31
-31
-31
-31
-31
-31
-31
-30
-30
-30
-30
-30
-30
-30
-30
-30
-30
-30
-30
-29
-29
-29
-29
-29
-29
-29
-29
-29
-29
-28
-28
-28
-28
-28
-28
-28
-28
-28
-28
-27
-27
-27
-27
-27
-27
-27
-27
-27
-27
-27
-27
-26
-26
-26
-26
-26
-26
-26
-26
-26
-25
-25
-25
-25
-25
-25
-25
-25
-24
-24
-24
-24
-24
-24
-24
-24
-24
-24
-23
-23
-23
-23
-23
-23
-23
-23
-23
-22
-22
-22
-22
-22
-22
-22
-22
-22
-21
-21
-21
-21
-21
-21
-21
-21
-20
-20
-20
-20
-20
-20
-20
-20
-20
-20
-20
-19
-19
-19
-19
-19
-19
-19
-19
-19
-19
-19
-18
-18
-18
-18
-18
-18
-18
-18
-18
-18
-18
-17
-17
-17
-17
-17
-17
-17
-17
-17
-17
-17
-17
-17
-17
-17
-16
-16
-16
-16
-16
-16
-16
-15
-15
-15
-15
-15
-15
-15
-15
-15
-15
-15
-14
-14
-14
-14
-14
-14
-14
-14
-14
-14
-14
-14
-14
-13
-13
-13
-13
-13
-13
-13
-12
-12
-12
-12
-12
-11
-11
-11
-11
-11
-11
-11
-11
-11
-10
-10
-10
-10
-10
-10
-10
-10
-10
-10
-10
-10
-10
-10
-10
-10
-9
-9
-9
-9
-9
-9
-9
-9
-9
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-8
-7
-7
-7
-7
-7
-7
-7
-7
-7
-7
-7
-7
-7
-7
-7
-6
-6
-6
-6
-6
-6
-6
-6
-6
-6
-6
-6
-6
-6
-5
-5
-5
-5
-5
-5
-5
-5
-4
-4
-4
-4
-4
-4
-4
-4
-3
-3
-3
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-2
-1
-1
-1
-1
-1
-1
-1
-1