단순 정렬 알고리즘 & 선택 정렬 알고리즘 - C 언어

2021. 12. 11. 13:03·C
728x90
반응형

단순 정렬 알고리즘

1
2
3
4
5
for(i=1 ; i<n ; i++) {
    for(j=i+1; j<=n ; j++) {
        if( a[i] > a[j]) swap( a[i], a[j] );
    }
}
Colored by Color Scripter
cs

 

i가 1부터 n-1까지 반복하고 j가 그 다음 데이터부터 n까지 반복하면서 a[i]이 a[j]보다 크면 서로의 값을 바꿔주어 가장 작은 값이 앞에 올 수 있도록 정렬하는 알고리즘이다.

초기 상태가 [ 21  34  4  54  29  17 ]인 데이터 배열이 있을 때 위 알고리즘을 실행한다면

[ 4  34  21  54  29  17 ]

[ 4  17  34  54  29  21 ]

...

[ 4  17  21  29  34  54 ]로 오름차순으로 잘 정렬된 것을 확인할 수 있다.

 

선택 정렬 알고리즘 

데이터 중에서 가장 작은 값을 찾아 오름차순으로 정렬될 수 있도록 순서를 바꿔주는 알고리즘

전체 코드는 아래와 같다.

1
2
3
4
5
6
7
8
9
int i,j,min;
 
for(i=1 ; i<n ; i++) {
    min =i;
    for(j=i+1; j<=n ; j++) {
        if(a[min] > a[j]) min = j;
    }
    swap(a[i], a[min])
}
Colored by Color Scripter
cs

 

i가 1 부터 n까지 a라는 배열에 들어있는 데이터 갯수만큼 반복문을 돌면서 가장 작은 최소 값을 찾아 swap 해주는 것이다.

먼저 첫번째 배열의 인덱스를 최소값 인덱스로 설정한다. min = i

그 후 i+1 번째 데이터부터 n까지 반복문을 돌아 a[min] 값보다 작은 값이 있다면 min 값을 수정해준다. 반복문이 끝나 최소값을 찾고난 뒤에는 오름차순 정렬을 위해 a[i]와 swap 해준다. 

예시를 보자면 다음과 같다.

초기 상태로 [ 21  34  4  54  29  17 ]인 데이터 배열이 있을 때 위 코드를 실행하면 먼저 min=i이기 때문에 a[i]와 a[min] 값 모두 21이다. 두번째 반복문을 실행하면  21과 34를 비교하고 21과 4을 비교하고 21과 54를 비교하고....17까지 비교를 마치게 된다.

이 과정에서 21과 비교했을 때 더 작은 값은 4이기 때문에 4의 인덱스인 2가 min에 들어가게 된다. 4보다 작은 데이터는 없으니 반복문을 종료하고 swap(a[i], a[min]) 즉, swap( 21, 4 )를 하게 된다.

이 첫번째 과정을 마치면 데이터 배열은 [ 4  34  21  54  29  17 ]의 상태가 된다. 모든 반복이 끝난 뒤에는 [ 4  17  21  29  34  51 ]로 정렬된 데이터 배열을 볼 수 있다.

 

 

 

참고 : C언어로 작성하는 컴퓨터 알고리즘 / 이한출판사

728x90
반응형
저작자표시 비영리 변경금지

'C' 카테고리의 다른 글

버블 정렬 알고리즘 - C 언어  (0) 2021.12.11
삽입 정렬 알고리즘 - C 언어  (0) 2021.12.11
균형 이진 탐색 트리 : AVL 트리와 회전 연산 - C 언어  (0) 2021.10.18
Union-Find 알고리즘 (동치류 문제) / 크루스칼 알고리즘 - C 언어  (0) 2021.06.11
신장 트리 / 최소 비용 신장 트리 / 프림 알고리즘, 크루스칼 알고리즘 - C 언어  (0) 2021.06.10
'C' 카테고리의 다른 글
  • 버블 정렬 알고리즘 - C 언어
  • 삽입 정렬 알고리즘 - C 언어
  • 균형 이진 탐색 트리 : AVL 트리와 회전 연산 - C 언어
  • Union-Find 알고리즘 (동치류 문제) / 크루스칼 알고리즘 - C 언어
waVwe
waVwe
    반응형
  • waVwe
    waVwe 개발 블로그
    waVwe
  • 전체
    오늘
    어제
    • ALL (184)
      • Python (1)
      • Spring (15)
      • DevOps (10)
      • Git (6)
      • JAVA (4)
      • C (22)
      • 코테 문제 풀이 (124)
        • 프로그래머스 (43)
        • 백준 (2)
        • 정올 (64)
        • SW Expert Academy (1)
        • 온코더 oncoder (14)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

    • 🐙 Github
  • 공지사항

  • 인기 글

  • 태그

    스프링
    깃헙
    연결리스트
    깃
    스파르타코딩
    자바
    java
    코테
    springboot
    docker
    자료구조
    이진트리
    progate
    C언어
    온코더
    C
    스파르타코딩클럽
    CI/CD
    프로그래머스
    MSA
    형변환
    내일배움캠프
    도커
    Til
    아파치카프카
    스프링부트
    알고리즘
    while문
    devops
    정올
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
waVwe
단순 정렬 알고리즘 & 선택 정렬 알고리즘 - C 언어
상단으로

티스토리툴바