본문 바로가기
알아두면 좋은것들

02.05 (TIL)

by 오랑이귀엽다 2024. 2. 5.

선택 정렬과 버블 정렬 설명 및 코드 작성

  • 선택 정렬(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