
<전체 과정(오름차순 가정)>
1. 전체 배열에서 인접한 원소끼리 비교하여 순차적으로 자리 교환
2. 전체 배열을 한 번 순회할 때마다 마지막 원소는 가장 큰 원소가 위치하게 된다
3. 가장 큰 원소가 놓인 인덱스 전까지 1, 2번 과정 반복
def bubble_sort(arr):
n = len(arr)
for i in range(n): # 0 ~ n-1
for j in range(n-i-1): # 0 ~ n-i-2
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
return arr
arr = [64, 34, 25, 12, 22, 11, 90]
bubble_sort(arr)
print("Sorted array is:", arr)
실행 결과

<전체 과정(오름차순 가정)>
1. 배열 전체에서 최솟값 탐색
2. 스왑(swap): 최솟값을 배열의 현재 위치와 교체
3. 다음 위치로 이동
4. 반복
def selection_sort(arr):
n=len(arr)
for i in range(n):
min_idx = i
for j in range(i+1, n):
if arr[min_idx] > arr[j]:
min_idx = j
arr[min_idx], arr[i] = arr[i], arr[min_idx]
return arr
arr = [64, 34, 25, 12, 22, 11, 90]
selection_sort(arr)
print("Sorted array is:", arr)
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot] # arr 안에서 pivot보다 작은 값들로 새 리스트를 만든다
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quick_sort(left) + middle + quick_sort(right)
arr = [64, 34, 25, 12, 22, 11, 90]
sorted_arr = quick_sort(arr)
print("Sorted array is:", sorted_arr)
>>> a = [5, 2, 3, 1, 4]
>>> a.sort()
>>> a
[1, 2, 3, 4, 5]
sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'})
[1, 2, 3, 4, 5]
.sort()는 값을 반환하지 않고 원본을 수정한다.
반면에, sorted()는 정렬된 값을 반환하고 원본은 수정하지 않는다.
student_tuples = [
('john', 'A', 15),
('jane', 'B', 12),
('dave', 'B', 10)
]
# student는 리스트 안의 한 튜플을 의미하는 임의의 변수
sorted(student_tuples, key = lambda student: student[2]) # student[2]순 정렬(나이순)
# 출력 결과: [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
cf) lambda는 익명함수를 만들 때 쓰는 문법
형태: lambda 매개변수: 반환값
sorted(student_tuples, key=lambda student: student[2])
에서 람다를 쓰지 않으면 아래와 같이 변경할 수 있다.
def get_age(student):
return student[2]
sorted(student_tuples, key=get_age)
참고문헌
https://docs.python.org/ko/3/howto/sorting.html
https://wikidocs.net/233711