Μάθημα : Προγραμματισμός Υπολογιστών Γ' ετος 2025-2026
Κωδικός : 4540050176
-
Θεματικές Ενότητες
-
3.3 Βασικές Ενσωματωμένες συναρτήσεις
-
4.1.2 Δομή επιλογής if
-
4.1.3 Δομή επανάληψης (For-While)
-
4.1.4 For ή While
-
4.2 Συναρτήσεις
-
8.1 Συμβολοσειρές (strings)
-
Λίστες
-
5.1 Δυαδική αναζητηση 5.2 Ταξινόμηση ανταλλαγής (bubble sort)
-
8.3 Στοίβα
-
8.4 Ουρά
-
7.3 Αρθρωματα (Modules)
-
7.3.2 Σύντομη περιγραφή της Πρότυπης βιβλιοθήκης (Standard Library)
-
7.3.3 Πακέτα (Packages)
-
6.Αρχεία
-
11.Αντικειμενοστραφής Προγραμματισμός
-
Τυποι δεδομένων,μεταβλητές, τελεστές,λογικές εκφράσεις
-
3.3 Βασικές Ενσωματωμένες συναρτήσεις
5.1 Δυαδική αναζητηση 5.2 Ταξινόμηση ανταλλαγής (bubble sort)
Ο αλγόρισθμος της δυαδικής αναζήτησης
Δυαδική αναζήτηση με επιστροφή θέσης
Η λύση του βιβλίου με τροποποίηση ώστε να επιστρέφει την θέση του αναζητούμενου
def binarySearch( array, key ) :#array: η λίστα και key: το αναζητούμενο
first = 0
last = len(array) - 1
while first <= last:
mid = ( first + last ) / 2
if array[ mid ] == key :
return mid #Επιστρέφει την θέση του αναζητούμενου στην λίστα
elif array[ mid ] < key :
first = mid + 1
else :
last = mid - 1
return -1 #Επιστρέφει -1 όταν δεν υπάρχει το αναζητούμενο στην λίστα
def anazitisi(A,key):#Με αλλον τρόπο
N=len(A)
pos=-1
first=0
last=N-1
while first<=last and pos==-1:
mid=(first+last)/2
if A[mid]==key:
pos=mid
elif A[mid]<key:
first=mid+1
else:
last=mid-1
return pos
Αλγόριθμος της ταξινόμησης ανταλλαγής (Φυσαλίδα)
Ο αλγόριθμος του βιβλίου αλλιώς
Στο βιβλίο δίνεται η παρακάτω λύση που τοποθετεί τον μικρότερο αριθμό στην αρχή και επαναλαμβάνει την διαδικασία για το υπόλοιπο τμήμα της λίστας:
N = len(A)
for i in range( N-1 ): # range(0, N–1, 1)
for j in range( N-1 , i , -1 ): # μέχρι και i–1
if A[ j ] < A[ j-1 ] :
A[ j ] , A[ j-1 ] = A[ j-1 ] , A[ j ]
Ισοδύναμη λύση είναι και η διαδικασία που εμφανίζεται παρακάτω όπου το μεγαλύτερο στοιχείο τοποθετείται στο τέλος και επαναλαμβάνει την διαδικασία για το υπόλοιπο τμήμα της λίστας:
N = len(A)
for i in range( N-1,0,-1 ):
for j in range( 0 , i):
if A[ j ] > A[ j+1 ] :
A[ j ] , A[ j+1 ] = A[ j+1 ] , A[ j ]
Ο αλγόριθμος του βιβλίου ως συνάρτηση
def bubbleSort(A):
N = len(A)
for i in range( N-1 ): # range(0, N–1, 1)
for j in range( N-1 , i , -1 ): # μέχρι και i–1
if A[ j ] < A[ j-1 ] :
A[ j ] , A[ j-1 ] = A[ j-1 ] , A[ j ]
return
Βελτιωμένος αλγόριθμος
Ο αλγόριθμος εάν σε κάποιο πέρασμα δεν κάνει καμία αντιμετάθεση τότε σημαίνει ότι η ταξινόμηση ολοκληρώθηκε και διακόπτεται
def bubbleSort(A):
N = len(A)
for i in range( N-1 ): # range(0, N–1, 1)
sorted=True
for j in range( N-1 , i , -1 ): # μέχρι και i–1
if A[ j ] < A[ j-1 ] :
A[ j ] , A[ j-1 ] = A[ j-1 ] , A[ j ]
sorted=False
if sorted:
return
return
Οι 4 εκδοχές της ταξινόμησης ανταλλαγής
Εκδοχή που υπάρχει στο βιβλίο, τοποθετεί αριστερά τους μικρότερους (αύξουσα ταξινόμιση)
Όλες οι εδοχές μετατρέπονται σε φθίνουσες ταξινομίσεις με αντιστροφή της ανισότητας στο IF
def bubleSort1(A):
N=len(A)
for i in range(N-1):
for j in range(N-1,i,-1):
if A[j]<A[j-1]:
A[j],A[j-1] = A[j-1],A[j]
print i+1,'Per:',A #Εμφανίζει τα διαδοχική περάσματα, δεν είναι απαραίτητη
return
Το ίδιο με το παραπάνω αλλά ξεκινάει το i από 1 και για αυτό σταματάει όταν το j γίνει i-1
def bubleSort2(A):
N=len(A)
for i in range(1,N):
for j in range(N-1,i-1,-1):
if A[j]<A[j-1]:
A[j],A[j-1] = A[j-1],A[j]
print i,'Per:',A #Εμφανίζει τα διαδοχική περάσματα, δεν είναι απαραίτητη
return
Εκδοχή που τοποθετεί τα μεγαλύτερα δεξιά (αύξουσα ταξινόμιση)
def bubleSort3(A):
N=len(A)
for i in range(N-1,0,-1):
for j in range(0,i):
if A[j]>A[j+1]:
A[j],A[j+1] = A[j+1],A[j]
print N-i,'Per:',A #Εμφανίζει τα διαδοχική περάσματα, δεν είναι απαραίτητη
return
Το ίδιο με το παραπάνω αλλά ξεκινάει το i από Ν και για αυτό σταματάει όταν το j γίνει i-1
def bubleSort4(A):
N=len(A)
for i in range(N,1,-1):
for j in range(0,i-1):
if A[j]>A[j+1]:
A[j],A[j+1] = A[j+1],A[j]
print N-i+1,'Per:',A #Εμφανίζει τα διαδοχική περάσματα, δεν είναι απαραίτητη
return