제이커브(Jcurve)
카멜레온 개발자 이야기
제이커브(Jcurve)
전체 방문자
오늘
어제
  • 분류 전체보기 (26)
    • Programming skills (19)
      • Unity (8)
      • C# (1)
      • 자료구조 (3)
      • 알고리즘 (1)
      • Git (1)
      • CS(Computer Science) (4)
      • Unreal (0)
      • C++ (1)
    • Literacy Review (1)
    • Finance (1)
      • Metaverse (0)
      • 주식 (1)
      • 가상화폐 (0)
    • Certificates (0)
      • 기사 (0)
      • Coursera (0)
      • Fast campus (0)
    • Architecture (5)
      • 건축시공학 (4)
      • 철근콘크리트구조 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 유니티강의
  • 게임개발
  • 유니티
  • ㅊ++기본문법
  • 일상 #초보 #기록# 일기
  • 건설시공관리자
  • 직장인자기계발
  • 싱글톤 # 유니티 #c# #Singleton
  • Literacy review
  • 주식
  • 역타공법
  • Z세대
  • 건축공학
  • C#과 유니티로 배우는 게임 개발 올인원 패키지 Online
  • 건설현장조직구성
  • 자료구조 # 스택과 큐
  • 건설사업관리
  • c++문법
  • 스마트건설기술
  • 패스트캠퍼스후기
  • 건축시공학
  • cmatrisk
  • 건축전문가
  • 패스트캠퍼스
  • 패캠챌린지
  • 백준
  • 일상
  • 건축
  • 직장인인강
  • VR #메타버스 #metaverse #Eyetracking #아이트래킹 #데이터추출

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
제이커브(Jcurve)

카멜레온 개발자 이야기

[자료구조] 선택정렬과 버블정렬 정의 및 차이
Programming skills/자료구조

[자료구조] 선택정렬과 버블정렬 정의 및 차이

2023. 10. 16. 23:44

1. 선택정렬 (Selection Sort) :  가장 작은 수를 찾아서 맨 앞으로 보내는 것

선택정렬

방법

1) 배열의 처음부터 끝까지 반복문을 통해 가장 작은 수를 탐색

2) 가장 작은 수를 배열의 맨 앞으로 보내기

3) 그 다음 배열부터 다시 1),2) 행동 반복

 

즉, 이중 for문을 통해 구현하므로 시간 복잡도는 n^2,0이다.

 

* 자리바꾸기 공식의 로직
1. 맨 왼쪽자리 변수 temp 선언
2. 맨 왼쪽자리에 올 값
3. 2번의 값은 temp

 

    //선택정렬 :  가장 작은 것을 선택해서 맨 앞으로 보낸다
    void SelectionSort()
    {
       //외부루프는 첫번째 요소부터 길이까지 탐색
        for(int i = 0; i < num.Count-1 ; i++)
        {
            //최솟값 설정
            int minIdex = i;
            //하나하나씩 비교
            for(int j = i+1; j < num.Count; j++)
            {
                //만약에 최솟값이 탐색한 값보다 크다면
                if (num[minIdx] > num[j])
                {
                    //최솟값이 탐색한 값이 된다.
                    minIdex = j;
                }
            }
            //자리바꾸기 공식(1. 맨 왼쪽자리 변수 temp 선언 2. 맨 왼쪽자리에 올 값 3. 2번의 값이 temp)
            //temp는 맨 왼쪽자리 변수 선언
            int temp = num[i];
            //맨 왼쪽자리는 최솟값
            num[i] = num[minIdex];
            //최솟값은 temp
            num[minIdex] = temp;
        }

        foreach (int n in num)
        {
            
            Debug.Log(n);
        }

    }

2. 버블정렬 (Bubble Sort) : 앞 뒤의 연결된 숫자를 서로 비교해서 큰 값은 뒤로 이동, 작은 값은 앞으로 이동한다.

버블 정렬

 

바로 오른쪽 옆에 있는 숫자와 크기 비교해서 크기가 작으면 자리를 바꿔 큰 숫자부터 맨 오른쪽으로 위치하는 것

이것도 마찬가지로 이중 for문을 사용하여 시간복잡도는 n^2,0으로 선택정렬과 동일하다.

    //버블 정렬 : 앞 뒤의 연결된 숫자를 서로 비교해서 큰 값은 뒤로 이동, 작은 값은 앞으로 이동한다.
    void BubbleSort()
    {
        for(int i = 0; i < num.Count-1; i++)
        {
            for(int j = 0; j < num.Count-1-i; j++)
            {
                //두 수를 비교
                if (num[j] > num[j+1])
                {
                    //자리 변경
                    int temp = num[j];
                    num[j] = num[j + 1];
                    num[j + 1] = temp;
                }
            }
        }

        foreach (int n in num)
        {

            Debug.Log(n);
        }
    }

 

정렬은 가장 기초적인 알고리즘으로 이번 포스팅에서 정렬을 확실하게 이해하고 넘어가야했다. 그래서 이해하는데 시간이 오래 걸렸다.

선택정렬은 버블정렬과 동일한 시간복잡도이다. 하지만 성능면에서 선택정렬이 더 우수하다는 것을 깨달았다. 왜냐하면 버블정렬은 자리이동마다 계산을 해야하기 때문이다. 추가적으로 시간복잡도에 대해서도 이해할 수 있었다. 

 

*시간 복잡도 : 컴퓨터가 연산하는 수행횟수 Big O(n)

'Programming skills > 자료구조' 카테고리의 다른 글

[자료구조]스택과 큐  (0) 2023.10.24
[자료구조] Array 와 LinkedList의 차이  (0) 2023.10.12
    'Programming skills/자료구조' 카테고리의 다른 글
    • [자료구조]스택과 큐
    • [자료구조] Array 와 LinkedList의 차이
    제이커브(Jcurve)
    제이커브(Jcurve)
    미래지향적인 성향으로 VR/AR, XR 등 가상현실에서 살아가는 사람들에 대한 공간을 연구하는 이야기입니다. 가상현실에 대한 공부와 연구를 주로 합니다.

    티스토리툴바