이 영역을 누르면 첫 페이지로 이동
쿄코코 블로그의 첫 페이지로 이동

쿄코코

페이지 맨 위로 올라가기

쿄코코

얼레벌레 생활🤯

[이코테] CHAPTER 06 정렬- 선택정렬,삽입정렬- 파이썬(Python), 자바(Java)

  • 2022.04.26 22:24
  • Study Platform📚/(알고리즘)- [이코테] 이것이 코딩테스트다 정리
    반응형

    정렬 : 데이터를 특정한 기준에 다라서 순서대로 나열 하는 것

    1) 선택정렬(selection sort)

    : 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸고, 그 다음 작은 데이터를 선택해 앞에서 두번째 데이터와 바꾸는 과정 반복

    데이터가 무작위로 여러 개 있을 때, 이중에서 가장 작은 데이터를 선택해 맨 앞에 있는 데이터와 바꾸고, 그 다음 작은 데이터를 선택해 앞에서 두 번째 데이터와 바꾸는 과정을 반복

    ex ) 

     파이썬(Python)

    #파이썬- 선택 정렬
    array = [7,5,9,0,3,1,6,2,4,8]
    
    for i in range(len(array)):
        min_index=i #가장 작은 원소의 인덱스
        for j in range(i+1,len(array)):
            if array[min_index]>array[j]:
                min_index=j
        array[i],array[min_index]=array[min_index],array[i]# 스와이프해서 집어넣기
    print(array)

    결과화면

    자바(Java)

    //Java - 선택 정렬
    
    public class e01_6_1 {
        public static void main(String[] args) {
            int[] array= {7,5,9,0,3,1,6,2,4,8};
    
            for(int i=0;i<array.length;i++){
                //가장 작은 원소의 인덱스
                int min_index=i;
                for(int j=i+1;j< array.length-1;j++){
                    if(array[j]<array[min_index]){
                        min_index=j;
                    }
                }
                int min_num=array[min_index];
                array[min_index]=array[i];
                array[i]=min_num;
            }
            for(int i:array){
                System.out.print(i+" ");
            }
        }
    }

    결과화면

     

     

    선택 정렬의 시간 복잡도 : 

    처음 숫자의 경우 N-1 번만큼 비교 연산 필요하고, 그 담에는 N-2번, N-3번....

    따라서 시간 복잡도는 (N-1) + (N-2) + (N-3) + .... + 1 = N x (N-1) /2 = O(N^2) -> 빅오 표기법 

     


    백준 문제 - 2750번

     

    백준 -2750 (수 정렬하기)

    1) 선택정렬로 푼 경우 정렬 - 선택정렬 정렬 : 데이터를 특정한 기준에 다라서 순서대로 나열 하는 것 1) 선택정렬(selection sort) 데이터가 무작위로 여러 개 있을 때, 이중에서 가장 작은 데이터를

    coooco.tistory.com

    2) 삽입 정렬 (Insertion Sort)

    : 정렬되어 있는 데이터 리스트에서 적절한 위치를 찾은 뒤에, 그 위치에 삽입

    삽입 정렬 구현 난이도 > 선택 정렬 구현 난이도 , but 삽입 정렬 시간 효율 > 선택 정렬 시간 효율 (* 특히 정렬이 완료된 경우 훨씬 효율적) 

    왜냐하면 삽입 정렬의 경우 현재 데이터의 상태와 상관없이 무조건 모든 원소와 비교하는 것에 반해 삽입 정렬은 적절한 위치에 삽입 하기 때문이다.

    특정한 데이터의 왼쪽에 있는 데이터들은 이미 정렬된상태이므로 자기보다 작은 데이터를 만났다면 더 이상 데이터를 살펴볼 필요 없이 그 자리에 삽입된다. 

     

    파이썬(Python)

    #파이썬- 삽입 정렬
    array=[7,5,9,0,3,1,6,2,4,8]
    
    for i in range(1,len(array)):#첫번째 인덱스는 이미 정렬되었다고 가정하므로
        for j in range(i,0,-1):#인덱스 i부터 1까지 1씩 감소하며 반복
            if array[j]<array[j-1]:#한칸씩 왼쪽으로 이동
                array[j],array[j-1]=array[j-1],array[j]#swap
            else: #자기보다 작은 데이터를 만나면 그 위치에서 멈춤
                break
    print(array)

    결과화면

    자바(Java)

    package s11_greedy;
    
    public class e01_6_3 {
        public static void main(String[] args) {
            int[] array= {7,5,9,0,3,1,6,2,4,8};;
            for(int i=1;i<array.length;i++){
                for(int j=i;j>0;j--){
                    if(array[j]<array[j-1]){
                        int num=array[j];
                        array[j]=array[j-1];
                        array[j-1]=num;
                    }else break;
                }
            }
            for(int i:array){
                System.out.print(i+" ");
            }
        }
    }

    결과화면

     

    삽입 정렬의 시간 복잡도 :

    삽입 정렬은 현재 리스트의 데이터가 거의 정렬되어 있는 상태라면 매우 빠르게 동작한다. 최선의 경우 O(N)의 시간 복잡도를 가진다. 보통은 삽입정렬이 비효율적이나 정렬이 거의 되어 있는 상황에서는 퀵 정렬 알고리즘보다 더 강력

     

    반응형

    'Study Platform📚 > (알고리즘)- [이코테] 이것이 코딩테스트다 정리' 카테고리의 다른 글

    [이코테]CHAPTER 05 DFS/BFS - 스택, 큐, 재귀함수, DFS  (0) 2022.05.17
    [이코테] CHAPTER 06 정렬 - 계수 정렬  (0) 2022.05.16
    [이코테]CHAPTER 06 정렬 - 퀵정렬- 파이썬(Python)  (0) 2022.05.15
    [이코테] CHAPTER 07 이진탐색- 순차 탐색, 이분탐색/이진탐색, 이진탐색트리  (0) 2022.05.13
    [이코테] CHAPTER 03 그리디(Greedy)  (0) 2022.05.11

    댓글

    이 글 공유하기

    • 구독하기

      구독하기

    • 카카오톡

      카카오톡

    • 라인

      라인

    • 트위터

      트위터

    • Facebook

      Facebook

    • 카카오스토리

      카카오스토리

    • 밴드

      밴드

    • 네이버 블로그

      네이버 블로그

    • Pocket

      Pocket

    • Evernote

      Evernote

    다른 글

    • [이코테] CHAPTER 06 정렬 - 계수 정렬

      [이코테] CHAPTER 06 정렬 - 계수 정렬

      2022.05.16
    • [이코테]CHAPTER 06 정렬 - 퀵정렬- 파이썬(Python)

      [이코테]CHAPTER 06 정렬 - 퀵정렬- 파이썬(Python)

      2022.05.15
    • [이코테] CHAPTER 07 이진탐색- 순차 탐색, 이분탐색/이진탐색, 이진탐색트리

      [이코테] CHAPTER 07 이진탐색- 순차 탐색, 이분탐색/이진탐색, 이진탐색트리

      2022.05.13
    • [이코테] CHAPTER 03 그리디(Greedy)

      [이코테] CHAPTER 03 그리디(Greedy)

      2022.05.11
    다른 글 더 둘러보기

    정보

    쿄코코 블로그의 첫 페이지로 이동

    쿄코코

    • 쿄코코의 첫 페이지로 이동

    검색

    메뉴

    • 홈

    카테고리

    • 분류 전체보기 (169)
      • Python (24)
        • 😈 99클럽 코테 스터디 4기 TIL (23)
        • 궁금한거 정리 (1)
      • SQL (16)
        • HackerRank (15)
      • [백준] Python,Java로 풀기📖 (71)
        • 정렬(Sorting) (6)
        • 그리디 (5)
        • 문자열 (7)
        • 수학 (3)
        • DFS&BFS (10)
        • 구현 (4)
        • 다이나믹 (17)
        • 이분탐색 (1)
        • 자료구조 (10)
        • 최단거리 (5)
        • 인덱스트리 (0)
      • [프로그래머스]Python,Java로 풀기 (6)
        • Level 1 (4)
        • Level 2 (2)
      • Study Platform📚 (25)
        • (운영체제) - 블로그 및 강의 참고 (0)
        • 김영한👨🏻‍🏫의 스프링 부트와 JPA 실무 완전 .. (5)
        • (알고리즘)- [이코테] 이것이 코딩테스트다 정리 (10)
        • 그림으로 배우는 Http&Network Basic (10)
      • 까먹을까봐 적는 것들 (5)
      • 테스트 보고 난 후..🤔 (0)
      • kt 에이블스쿨 (18)

    최근 글

    인기 글

    댓글

    공지사항

    아카이브

    태그

    • 프로그래머스
    • 코딩테스트준비
    • 99클럽
    • 항해99
    • 오블완
    • 백준
    • 티스토리챌린지
    • TiL

    나의 외부 링크

    정보

    쿄코코의 쿄코코

    쿄코코

    쿄코코

    블로그 구독하기

    • 구독하기
    • RSS 피드

    방문자

    • 전체 방문자
    • 오늘
    • 어제

    티스토리

    • 티스토리 홈
    • 이 블로그 관리하기
    • 글쓰기
    Powered by Tistory / Kakao. © 쿄코코. Designed by Fraccino.

    티스토리툴바