정렬

2018. 10. 27. 19:59·Language/C C++
반응형
정렬

Alt Text

정렬

정렬이란 사용자가 원하는 순서대로 원소들을 배치하는 것이다. 정렬을 할 수 있는 자료구조에는 배열, 리스트, 그래프가 있다. 정렬은 종류에 따라 속도의 차이가 있다. 아래의 영상을 보면 각각의 정렬 알고리즘들이 정렬을 하는데 걸리는 속도를 한눈에 볼 수 있다.

@동영상

오늘 우리는 속도가 N^2인 정렬 알고리즘을 공부할 것이다.

먼저 버블정렬을 살펴보자. 버블정렬은 인접한 두 원소를 비교해 나가면서 가장 큰 원소를 뒤로보내는 정렬은 해나가는 정렬이다. 이 때 작업을 n-1번 반복하는데 이유는 n-1번째에는 n번째 역시 정렬되있기 때문이다.

xxxxxxxxxx
void BubbleSort(int* arr, int size){
        int i, j;
        int temp;
        for( i = 0 ; i < size -2 ; i++){
                for(j = i ; j < size-1 ; j++){
                        if(arr[j] > arr[j+1]){
                                temp = arr[j];
                                arr[j] = arr[j+1];
                                arr[j+1] = temp;
                        }
                }
        }
}


선택정렬은 버블정렬을 개선한 정렬이다. 버블정렬에서는 모든 원소를 밀어내면서 정렬했지만, 선택정렬은 가장 큰 값을 찾아 맨 뒤 원소와 교체한다. 따라서 매번 스왑을 해주는 버블정렬보다 근소하게 빠르다.

xxxxxxxxxx
void Sellection(int* arr, int size){
        int i, j;
        int temp;
        int m;
        for( i = 0 ; i < size - 1 ; i++){
                m = i;
                for( j = i ; j < size ; j++){
                        if(arr[j] < arr[m]){
                                m = j;
                        }
                }
                temp = arr[i];
                arr[i] = arr[m];
                arr[m] = temp;
        }
}


삽입정렬은 새로운 배열을 만들어 원소 하나씩 정렬해 가면서 삽입해 나간다고 생각하면 된다.

xxxxxxxxxx
void insertSort(int* arr, int size){
        int i, j;
        int m;
        for( i = 1 ; i < size; i++ ){
                m = arr[i];
                for(j = i-1 ; j >= 0 ; j--){
                        arr[j+1] = arr[j];
                        if(m > arr[j+1]){
                                break;
                        }
                }
                arr[j+1] = m;
        }
}

 

 

 


반응형
저작자표시 비영리 변경금지 (새창열림)
'Language/C C++' 카테고리의 다른 글
  • [C++]optional
  • 아이템선택
  • 중복 없는 난수 생성
  • 시간 측정
덴마크초코우유
덴마크초코우유
IT, 알고리즘, 프로그래밍 언어, 자료구조 등 정리
    반응형
  • 덴마크초코우유
    이것저것끄적
    덴마크초코우유
  • 전체
    오늘
    어제
    • 분류 전체보기 (117)
      • Spring Framework (2)
        • Spring (2)
        • JPA (2)
        • Spring Security (0)
      • Language (51)
        • Java (11)
        • Python (10)
        • JavaScript (5)
        • NUXT (2)
        • C C++ (15)
        • PHP (8)
      • DB (16)
        • MySQL (10)
        • Reids (3)
        • Memcached (2)
      • 개발 (1)
      • 프로젝트 (2)
      • Book (2)
      • PS (15)
        • 기타 (2)
        • 백준 (2)
        • 프로그래머스 (10)
      • 딥러닝 (8)
        • CUDA (0)
        • Pytorch (0)
        • 모델 (0)
        • 컴퓨터 비전 (4)
        • OpenCV (1)
      • 기타 (16)
        • 디자인패턴 (2)
        • UnrealEngine (8)
        • ubuntu (1)
        • node.js (1)
        • 블로그 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    클래스
    프로그래머스
    언리얼엔진4
    Unreal
    C++
    PS
    MySQL
    Python
    NUXT
    pytorch
    Unreal Engine
    php
    JS
    map
    FPS
    JavaScript
    알고리즘
    select
    게임
    게임 개발
    mscoco
    자바
    블루프린트
    딥러닝
    파이썬
    웹
    redis
    memcached
    CPP
    C
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
덴마크초코우유
정렬
상단으로

티스토리툴바