CWN(CHANGE WITH NEWS) - 알고 나면 유용한 알고리즘 정보... #2. 정렬 알고리즘

  • 구름조금홍성-5.1℃
  • 맑음인제-8.1℃
  • 구름많음보은-6.3℃
  • 구름조금북춘천-8.8℃
  • 맑음파주-10.5℃
  • 구름많음거제0.6℃
  • 구름많음천안-6.7℃
  • 구름많음강진군-1.9℃
  • 구름많음해남-2.0℃
  • 맑음춘천-7.4℃
  • 구름조금목포-3.5℃
  • 구름많음보령-5.2℃
  • 구름많음함양군-0.1℃
  • 구름많음고창-4.2℃
  • 구름많음군산-5.2℃
  • 구름많음영주-4.0℃
  • 구름많음순창군-3.4℃
  • 구름많음광양시2.1℃
  • 구름조금의령군-0.9℃
  • 구름많음남원-4.3℃
  • 구름많음임실-4.3℃
  • 맑음강화-9.5℃
  • 흐림제주2.6℃
  • 구름많음서청주-6.7℃
  • 흐림흑산도-0.6℃
  • 구름많음대구-1.5℃
  • 맑음철원-11.6℃
  • 맑음이천-6.1℃
  • 구름조금북강릉-1.6℃
  • 구름많음영천-1.2℃
  • 구름많음제천-7.1℃
  • 구름많음의성-3.7℃
  • 구름조금강릉-0.8℃
  • 구름조금동해-0.2℃
  • 구름많음대전-6.0℃
  • 맑음정선군-5.8℃
  • 구름많음안동-4.9℃
  • 구름조금인천-10.0℃
  • 맑음홍천-7.9℃
  • 구름많음부산0.5℃
  • 구름많음경주시-1.1℃
  • 구름조금김해시0.0℃
  • 구름많음장흥-1.2℃
  • 눈울릉도-2.2℃
  • 구름많음원주-7.5℃
  • 구름조금대관령-8.0℃
  • 구름많음충주-7.0℃
  • 구름많음완도0.7℃
  • 맑음양평-6.4℃
  • 구름많음영광군-4.0℃
  • 구름많음태백-4.0℃
  • 맑음수원-7.7℃
  • 구름많음거창-0.1℃
  • 구름많음세종-6.5℃
  • 맑음속초-2.3℃
  • 흐림성산2.1℃
  • 구름많음청송군-4.2℃
  • 구름많음고산2.1℃
  • 구름조금남해2.5℃
  • 구름조금창원-0.3℃
  • 맑음서산-5.9℃
  • 구름조금밀양-0.8℃
  • 구름많음상주-5.5℃
  • 구름조금울산-0.5℃
  • 구름많음추풍령-6.6℃
  • 구름많음진주2.1℃
  • 구름많음청주-6.7℃
  • 맑음동두천-9.8℃
  • 구름많음포항1.3℃
  • 구름조금여수1.7℃
  • 구름많음전주-5.3℃
  • 구름많음문경-4.6℃
  • 구름조금북부산1.6℃
  • 구름많음봉화-4.3℃
  • 맑음서울-9.1℃
  • 구름많음보성군0.7℃
  • 맑음양산시1.8℃
  • 구름많음구미-3.8℃
  • 눈백령도-8.2℃
  • 구름조금장수-5.0℃
  • 구름많음울진1.9℃
  • 구름조금북창원-0.1℃
  • 구름많음서귀포8.1℃
  • 구름조금통영1.8℃
  • 구름많음부안-3.9℃
  • 구름많음영덕0.8℃
  • 맑음합천-0.2℃
  • 구름많음금산-5.5℃
  • 구름많음정읍-5.1℃
  • 구름많음진도군-1.5℃
  • 구름조금산청0.6℃
  • 구름많음고창군-5.0℃
  • 구름많음고흥0.7℃
  • 구름많음부여-5.3℃
  • 구름조금광주-1.9℃
  • 구름조금영월-5.3℃
  • 구름조금순천-2.0℃
  • 2026.01.20 (화)

알고 나면 유용한 알고리즘 정보... #2. 정렬 알고리즘

김가언 / 기사승인 : 2021-06-08 17:07:36
  • -
  • +
  • 인쇄

성적, 출석부, 평점 순, 가격순 등 대다수 데이터는 오름차순, 내림차순으로 정렬해야 사용하기 편리하다.
데이터 정렬 방법은 매우 다양하지만, 이번 기사에서는 단순한 정렬 알고리즘인 버블정렬, 선택정렬, 삽입정렬을 알아보자. 모두 오름차순을 기준으로 정렬한다고 가정해보자.

먼저 버블정렬에 대해 알아보자. 버블 정렬은 첫 번째 데이터와 두 번째 데이터, 두 번째 데이터와 세 번째 데이터를 비교하고 교환하면서 정렬하는 방법이다. 처음 정렬이 이루어지면 가장 큰 데이터부터 정렬되는 방식으로 모든 데이터를 정렬하기 위해서는 (데이터의 개수 - 1) 번 만큼 정렬해야 한다.

[5, 11, 8, 3, 1]을 버블 정렬로 정렬해보자.
1. [5, 11, 8, 3, 1] -> [5, 8, 11, 3, 1] -> [5, 8, 3, 11, 1] -> [5, 8, 3, 1, 11] : 11 정렬됨
2. [5, 8, 3, 1, 11] -> [5, 3, 8, 1, 11] -> [5, 3, 1, 8, 11] : 8, 11 정렬됨
3. [3, 5, 1, 8, 11] -> [3, 1, 5, 8, 11] : 5, 8, 11 정렬됨
4. [1, 3, 5, 8, 11] : 정렬 완료

위와 같이 모든 원소를 하나씩 비교하기 때문에 데이터 정밀 비교가 가능하다는 장점이 있다. 하지만, 데이터의 수가 많아질수록 정렬 과정에 오랜 시간이 걸린다는 단점이 있다.

이제 선택정렬에 대해 알아보자. 선택정렬은 첫 번째 데이터와 두 번째부터 마지막 데이터를 비교해 가장 작은 값을 첫 번째 자리로 교환하고, 두 번째 데이터와 세 번째부터 마지막 데이터를 비교한다. 그리고, 그중 가장 작은 값을 두 번째 자리로 교환하면서 정렬한다. 처음 정렬이 이루어지면, 가장 작은 값부터 정렬되는 방식으로 모든 데이터를 정렬하기 위해서는 버블 정렬과 같이 (데이터 개수 - 1) 번 만큼 정렬해야 한다.

[5, 11, 8, 3, 1]을 선택정렬로 정렬해보자.
1. [5, 11, 8, 3, 1] -> 1이 가장 작음 -> 5와 1 교환 -> [1, 11, 8, 3, 5] : 1 정렬됨
2. [1, 11, 8, 3, 5] -> 3이 가장 작음 -> 11과 3 교환 -> [1, 3, 8, 11, 5] : 1, 3 정렬됨
3. [1, 3, 8, 11, 5] -> 5가 가장 작음 -> 8과 5 교환 -> [1, 3, 5, 11, 8] : 1, 3, 5 정렬됨
4. [1, 3, 5, 11, 8] -> 8이 가장 작음 -> 11과 8 교환 -> [1, 3, 5, 8, 11] : 정렬 완료

예시처럼 데이터를 비교하는 횟수 자체는 많지만, 데이터를 교환하는 횟수가 적다는 특징이 있다. 데이터를 교환하는 횟수가 적기 때문에 교환이 많을수록 효율적으로 사용할 수 있다. 예를 들어, 오름차순으로 정렬된 데이터를 내림차순으로 정렬한다면, 교환을 많이 하지 않고도 정렬이 가능하다. 하지만, 비교 횟수가 많고 자료가 추가되면, 오랜 시간이 걸린다는 단점이 있다.

마지막으로 알아볼 정렬방법은 삽입정렬이다. 삽입정렬은 두 번째 데이터부터 시작해 그 왼쪽에 나열된 데이터를 비교해나가며 정렬하는 방식이다. 두 번째 데이터를 첫 번째 데이터와 비교해 데이터가 삽입될 위치를 찾아 삽입하고, 세 번째 데이터를 첫 번째 데이터 및 두 번째 데이터와 비교해, 데이터가 삽입될 위치를 찾아 삽입하는 방식으로 정렬이 이루어진다.

[5, 11, 8, 3, 1]을 삽입정렬로 정렬해보자.
1. [5, 11, 8, 3, 1] -> 11과 5 비교 -> 유지 -> [5, 11, 8, 3, 1]
2. [5, 11, 8, 3, 1] -> 8과 5, 11 비교 -> 5와 11 사이에 삽입 -> [5, 8, 11, 3, 1]
3. [5, 8, 11, 3, 1] -> 3과 5, 8, 11 비교 -> 5 왼쪽에 삽입 -> [3, 5, 8, 11, 1]
4. [3, 5, 8, 11, 1 ] -> 1과 3, 5, 8, 11 비교 -> 3 왼쪽에 삽입 -> [1, 3, 5, 8, 11] : 정렬 완료

버블정렬과 선택정렬과는 달리 빠른 정렬이 가능하다. 삽입정렬은 버블정렬의 비교회수를 줄이기 위해 고안된 정렬이므로 크기가 작은 데이터를 효율적으로 정렬할 수 있다.

세 가지 정렬 방법 모두 각각 장단점이 다르고 데이터의 수에 따라 걸리는 시간, 사용되는 메모리 크기 모두 다르다. 따라서 데이터의 수, 메모리의 크기 등 여러 상황을 고려하여 선택해야 한다.

[저작권자ⓒ CWN(CHANGE WITH NEWS). 무단전재-재배포 금지]

최신기사

뉴스댓글 >

- 띄어 쓰기를 포함하여 250자 이내로 써주세요.
- 건전한 토론문화를 위해, 타인에게 불쾌감을 주는 욕설/비방/허위/명예훼손/도배 등의 댓글은 표시가 제한됩니다.

댓글 0

Today

Hot Issue