자료구조와 알고리즘 실습 | Data Structures & Algorithms Lab
버블 정렬 알고리즘을 구현합니다
## 함수 선언 부분 ## def BubbleSort(ary) :
## 전역 변수 선언 부분 ## dataAry = [188, 162, 168, 120, 50, 150, 177, 105] ## 메인 코드 부분 ##
Implements the bubble sort algorithm
## Function Declarations ## def BubbleSort(ary) :
## Global Variables ##
dataAry = [188, 162, 168, 120, 50, 150, 177, 105]
## Main Code ##
print('Before sorting -->', dataAry)
dataAry = BubbleSort(dataAry)
print('After sorting -->', dataAry)
개선된 버블 정렬을 구현합니다 (교환 없으면 중단)
## 함수 선언 부분 ## def bubbleSort(ary) :
## 전역 변수 선언 부분 ## dataAry = [50, 105, 120, 188, 150, 162, 168, 177] ## 메인 코드 부분 ##
Implements improved bubble sort (stops if no swaps)
## Function Declarations ## def bubbleSort(ary) :
## Global Variables ##
dataAry = [50, 105, 120, 188, 150, 162, 168, 177]
## Main Code ##
print('Before sorting -->', dataAry)
dataAry = bubbleSort(dataAry)
print('After sorting -->', dataAry)
퀵 정렬 알고리즘을 구현합니다 (간단 버전)
## 함수 선언 부분 ## def quickSort(ary) :
## 전역 변수 선언 부분 ## dataAry = [188, 150, 168, 162, 105, 120, 177, 50] ## 메인 코드 부분 ##
Implements quick sort algorithm (simple version)
## Function Declarations ## def quickSort(ary) :
## Global Variables ##
dataAry = [188, 150, 168, 162, 105, 120, 177, 50]
## Main Code ##
print('Before sorting -->', dataAry)
dataAry = quickSort(dataAry)
print('After sorting -->', dataAry)
퀵 정렬의 동작 과정을 출력합니다
## 함수 선언 부분 ## def quickSort(ary) :
## 전역 변수 선언 부분 ## dataAry = [120, 120, 188, 150, 168, 50, 50, 162, 105, 120, 177, 50] ## 메인 코드 부분 ##
Prints the step-by-step process of quick sort
## Function Declarations ## def quickSort(ary) :
## Global Variables ##
dataAry = [120, 120, 188, 150, 168, 50, 50, 162, 105, 120, 177, 50]
## Main Code ##
print('Before sorting -->', dataAry)
dataAry = quickSort(dataAry)
print('After sorting -->', dataAry)
in-place 퀵 정렬을 구현합니다
## 함수 선언 부분 ## def qSort(arr, start, end) :
def quickSort(ary) :
## 전역 변수 선언 부분 ## dataAry = [188, 150, 168, 162, 105, 120, 177, 50] ## 메인 코드 부분 ##
Implements in-place quick sort
## Function Declarations ## def qSort(arr, start, end) :
def quickSort(ary) :
## Global Variables ##
dataAry = [188, 150, 168, 162, 105, 120, 177, 50]
## Main Code ##
print('Before sorting -->', dataAry)
quickSort(dataAry)
print('After sorting -->', dataAry)
tkinter로 버블 정렬을 시각화합니다
from tkinter import *
window = Tk()
window.geometry("600x600")
photo = PhotoImage(file = 'pet01.gif')
paper = Label(window, image=photo)
paper.pack(expand=1, anchor = CENTER)
window.mainloop()
Visualizes bubble sort using tkinter
from tkinter import *
window = Tk()
window.geometry("600x600")
photo = PhotoImage(file = 'pet01.gif')
paper = Label(window, image=photo)
paper.pack(expand=1, anchor = CENTER)
window.mainloop()
tkinter로 선택 정렬을 시각화합니다
from tkinter import *
window = Tk()
window.geometry("600x600")
photo = PhotoImage(file = 'pet01.gif')
photoAry=[]
h = photo.height()
w = photo.width()
for i in range(h) :
for k in range(w) :
r, g, b = photo.get(i,k)
value = (r + g + b) // 3
photoAry.append(value)
# 이 부분에 필요한 내용을 추가
paper = Label(window, image=photo)
paper.pack(expand=1, anchor = CENTER)
window.mainloop()
Visualizes selection sort using tkinter
from tkinter import *
window = Tk()
window.geometry("600x600")
photo = PhotoImage(file = 'pet01.gif')
photoAry=[]
h = photo.height()
w = photo.width()
for i in range(h) :
for k in range(w) :
r, g, b = photo.get(i,k)
value = (r + g + b) // 3
photoAry.append(value)
# Add necessary content here
paper = Label(window, image=photo)
paper.pack(expand=1, anchor = CENTER)
window.mainloop()
tkinter로 삽입 정렬을 시각화합니다
from tkinter import *
window = Tk()
window.geometry("600x600")
photo = PhotoImage(file = 'pet01.gif')
photoAry=[]
h = photo.height()
w = photo.width()
for i in range(h) :
for k in range(w) :
r, g, b = photo.get(i,k)
value = (r + g + b) // 3
photoAry.append(value)
for i in range(len(photoAry)) :
if photoAry[i] <= 127 :
photoAry[i] = 0
else :
photoAry[i] = 255
pos = 0
for i in range(h) :
for k in range(w) :
r = g = b = photoAry[pos]
pos += 1
photo.put("#%02x%02x%02x" % (r, g, b), (i, k))
paper = Label(window, image=photo)
paper.pack(expand=1, anchor = CENTER)
window.mainloop()
Visualizes insertion sort using tkinter
from tkinter import *
window = Tk()
window.geometry("600x600")
photo = PhotoImage(file = 'pet01.gif')
photoAry=[]
h = photo.height()
w = photo.width()
for i in range(h) :
for k in range(w) :
r, g, b = photo.get(i,k)
value = (r + g + b) // 3
photoAry.append(value)
for i in range(len(photoAry)) :
if photoAry[i] <= 127 :
photoAry[i] = 0
else :
photoAry[i] = 255
pos = 0
for i in range(h) :
for k in range(w) :
r = g = b = photoAry[pos]
pos += 1
photo.put("#%02x%02x%02x" % (r, g, b), (i, k))
paper = Label(window, image=photo)
paper.pack(expand=1, anchor = CENTER)
window.mainloop()
tkinter로 퀵 정렬을 시각화합니다
from tkinter import * ## 함수 선언 부분 ## def qSort(arr, start, end) :
def quickSort(ary) :
## 메인 코드 부분 ##
Visualizes quick sort using tkinter
from tkinter import * ## Function Declarations ## def qSort(arr, start, end) :
def quickSort(ary) :
## Main Code ##
window = Tk()
window.geometry("600x600")
photo = PhotoImage(file = 'pet02.gif')
photoAry=[]
h = photo.height()
w = photo.width()
for i in range(h) :
for k in range(w) :
r, g, b = photo.get(i,k)
value = (r + g + b) // 3
photoAry.append(value)
dataAry = photoAry[:]
quickSort(dataAry)
midValue = dataAry[h*w // 2]
for i in range(len(photoAry)) :
if photoAry[i] <= midValue :
photoAry[i] = 0
else :
photoAry[i] = 255
pos = 0
for i in range(h) :
for k in range(w) :
r = g = b = photoAry[pos]
pos += 1
photo.put("#%02x%02x%02x" % (r, g, b), (i, k))
paper = Label(window, image=photo)
paper.pack(expand=1, anchor = CENTER)
window.mainloop()
정렬 성능 비교: 선택/삽입 정렬의 시간을 측정합니다
import random import time ## 함수 선언 부분 ## def selectionSort(ary) :
def qSort(arr, start, end) :
def quickSort(ary) :
## 메인 코드 부분 ##
Performance comparison: measures time of selection/insertion sort
import random import time ## Function Declarations ## def selectionSort(ary) :
def qSort(arr, start, end) :
def quickSort(ary) :
## Main Code ##
countAry = [1000, 10000, 12000, 15000]
for count in countAry :
tempAry = [ random.randint(10000, 99999) for _ in range(count)]
selectAry = tempAry[:]
quickAry = tempAry[:]
print("## Data count: ", count, "items")
start = time.time()
selectionSort(selectAry)
end = time.time()
print(" Selection sort --> %10.3f sec" % (end-start))
start = time.time()
quickSort(selectAry)
end = time.time()
print(" Quick sort --> %10.3f sec" % (end-start))
print()
count *= 5
정렬 성능 비교: 버블/퀵 정렬의 시간을 측정합니다
import random import time ## 함수 선언 부분 ## def bubbleSort(ary) :
def qSort(arr, start, end) :
def quickSort(ary) :
## 메인 코드 부분 ##
Performance comparison: measures time of bubble/quick sort
import random import time ## Function Declarations ## def bubbleSort(ary) :
def qSort(arr, start, end) :
def quickSort(ary) :
## Main Code ##
tempAry = [ random.randint(10000, 99999) for _ in range(1000000)]
tempAry.sort()
rndPos = random.randint(0, len(tempAry)-1)
print("# Data count --> ", len(tempAry))
print("# Inserted position --> ", rndPos)
tempAry.insert(rndPos, tempAry[-1])
bubbleAry = tempAry[:]
quickAry = tempAry[:]
start = time.time()
bubbleSort(bubbleAry)
end = time.time()
print("Re-sort time (bubble sort) --> %10.3f sec" % (end-start))
start = time.time()
quickSort(quickAry)
end = time.time()
print("Re-sort time (quick sort) --> %10.3f sec" % (end-start))
버블 정렬을 직접 구현하고 비교 횟수를 셉니다
import random ## 함수 선언부 def BubbleSort(ary) :
## 전역 변수부 dataAry = [ ] count = 0 ## 메인 코드부
Implements bubble sort and counts comparisons yourself
import random ## Function Declarations def BubbleSort(ary) :
## Global Variables
dataAry = [ ]
count = 0
## Main Code
dataAry = [random.randint(0,200) for _ in range(10)]
print('Before sorting -->', dataAry)
dataAry = BubbleSort(dataAry)
print('After sorting -->', dataAry)
print('##', count, "comparisons to complete")
퀵 정렬을 직접 구현하고 비교 횟수를 셉니다
import random ## 함수 선언부 def quickSort(ary) :
## 전역 변수부 dataAry = [ ] count = 0 ## 메인 코드부
Implements quick sort and counts comparisons yourself
import random ## Function Declarations def quickSort(ary) :
## Global Variables
dataAry = [ ]
count = 0
## Main Code
dataAry = [random.randint(0,200) for _ in range(10)]
print('Before sorting -->', dataAry)
dataAry = quickSort(dataAry)
print('After sorting -->', dataAry)
print('##', count, "comparisons to complete")