선택 정렬과 버블 정렬 설명 및 코드 작성
- 선택 정렬(Selection Sort): 가장 작은 (또는 가장 큰) 요소를 찾아서 맨 앞의 요소와 바꾸고, 그 다음 작은 요소를 찾아 두 번째 요소와 바꾸는 방식으로 정렬을 진행합니다. 이 과정을 배열의 모든 요소에 대해 반복합니다.
- 버블 정렬(Bubble Sort): 인접한 두 요소를 비교하여 잘못된 순서(예: 오름차순 정렬에서 앞의 요소가 더 큰 경우)가 있으면 서로 위치를 바꾸는 과정을 배열의 끝까지 반복합니다. 이 과정을 배열이 정렬될 때까지 반복합니다.
선택 정렬(Selection Sort) 코드 예시 :
def selection_sort(arr):
// 배열의 길이만큼 반복
for i in range(len(arr)):
// 현재 인덱스를 최소값 인덱스로 가정
min_index = i
// 현재 인덱스 다음부터 배열 끝까지 최소값 탐색
for j in range(i+1, len(arr)):
// 더 작은 값을 찾으면 min_index 갱신
if arr[j] < arr[min_index]:
min_index = j
// 찾은 최소값을 현재 위치로 이동
arr[i], arr[min_index] = arr[min_index], arr[i]
return arr
버블 정렬(Bubble Sort) 코드 예시 :
def bubble_sort(arr):
n = len(arr)
// 배열의 길이만큼 반복
for i in range(n):
// 배열 끝부터 현재 위치까지 반복하여 인접 요소 비교
for j in range(0, n-i-1):
// 인접 요소가 잘못된 순서면 위치 교환
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
return arr
스택 메모리와 힙 메모리
- 스택 메모리: 함수 호출 시 생성되는 지역 변수와 매개변수가 저장되는 메모리 영역입니다. 스택 메모리는 LIFO(Last In, First Out) 방식으로 관리되며, 함수 호출이 완료되면 자동으로 해제됩니다.
- 힙 메모리: 동적으로 할당된 객체(예: new 연산자를 사용하여 생성된 객체)가 저장되는 메모리 영역입니다. 힙 메모리는 개발자가 직접 관리해야 하며, 가비지 컬렉터가 사용되지 않는 객체를 정리합니다.
- 차이점: 스택 메모리는 자동으로 관리되는 반면, 힙 메모리는 수명 주기 관리가 필요합니다. 스택은 빠르게 접근할 수 있지만 공간이 제한적이며, 힙은 더 큰 메모리 할당이 가능하지만 관리가 복잡하고 접근 속도가 느릴 수 있습니다.
값 형식과 참조 형식의 차이
- 값 형식(Value Type): 변수가 직접 데이터 값을 저장합니다. 값 형식의 변수를 다른 변수에 할당할 때, 값의 복사본이 생성되어 할당됩니다. 예를 들어, C#에서의 int, float 등이 있습니다.
- 참조 형식(Reference Type): 변수가 메모리상의 데이터 위치(주소)를 저장합니다. 참조 형식의 변수를 다른 변수에 할당할 때, 데이터의 위치(주소)가 복사되어, 두 변수가 같은 객체를 참조하게 됩니다. 예를 들어, C#에서의 클래스 인스턴스가 이에 해당합니다.
- 차이점: 값 형식은 스택 메모리에 저장되고, 참조 형식은 힙 메모리에 저장됩니다. 값 형식은 데이터의 복사본을, 참조 형식은 데이터의 참조(주소)를 다룹니다. 이로 인해 값 형식은 데이터의 무결성을 유지하기 쉬우나, 참조 형식은 데이터를 여러 곳에서 공유할 수 있는 장점이 있습니다.
'알아두면 좋은것들' 카테고리의 다른 글
02.13 (TIL) (0) | 2024.02.13 |
---|---|
02.06 (TIL) (1) | 2024.02.06 |
02.02 (TIL) (0) | 2024.02.02 |
02.01 (TIL) (0) | 2024.02.01 |
01.31 (TIL) (0) | 2024.01.31 |