훈, IT 공부/C,C++,MFC

[실습코딩] 정렬 코드화 하기 ( 버블, 선택, 선택으로 알려진 버블)

IT훈이 2018. 1. 1.
반응형

정렬을 해봅시다.

버블정렬, 선택정렬, 선택정렬으로 알려진 버블정렬


'

개인적으로 반지의 제왕에서 명장면 중 하나라 생각하는 펠렌노르 전투입니다.


잘 정렬 되어있는 로한의 기마부대가 보이십니까!!!?? 



저희도 정렬한번 해보러 가보시죠

버블정렬 ( Bubble Sort )

버블정렬에서 오름차순 정렬은 

첫 인덱스를 기준으로 하여서 다음 인덱스와 비교하여 다음 인덱스가 숫자가 적을 경우 바로 교환을 실시합니다. 그렇지 않다면 첫 기준 인덱스가 +1 되어 다시 서로 인접한 두 항을 계속해서 비교하는 방식입니다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include<stdio.h>
 
int main(void){
    //버블정렬
 
    int nList[5= { 90501196041 };
    int num_case = 0;
 
    for (int i = 0; i < 4; i++){
        for (int j = 0; j < 4++j){
            if (nList[j] > nList[j + 1]){
                num_case = nList[j];
                nList[j] = nList[j+1];
                nList[j + 1= num_case;
            }
        }
        printf("%d번째:", i + 1);
        for (int z = 0; z < 5; z++){
            printf("%d ", nList[z]);
        }
        putchar('\n');
 
    }
    for (int z = 0; z < 5; z++){
        printf("%d ", nList[z]);
    }
    putchar('\n');
    return 0;
}









cs


선택정렬 ( Select Sort )


선택정렬의 오름차순은 

첫 기준 인덱스를 잡고 인덱스의 끝까지 비교하여서 제일 작은 숫자와 교환을 하는 방식입니다.

버블 정렬과 다른점은 처음 선택한 인덱스를 기준으로 잡고 전체를 검색하고 난 뒤에 교환을 할 것인지 하지 않을 것인지 결정하게 됩니다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<stdio.h>
 
int main(void){
 
    int nList[5= { 90501196041 };
    int nMin_Index = 0;
    int nTmp = 0;
 
    for (int i = 0; i < 4; i++){
nMin_Index = i;
        for (int j = i + 1; j < 5; j++){
            if (nList[nMin_Index] > nList[j]){
                nMin_Index = j;        // 최소값을 인덱스만 저장한다.
            }
        }
if(nMin_Index != i){
         nTmp = nList[i];
         nList[i] = nList[nMin_Index];
         nList[nMin_Index] = nTmp;
  }

        printf("%d번째:", i + 1);
 
        for (int z = 0; z < 5; z++){
            printf("%d ", nList[z]);
        }
        puts("");
        
    }
    puts("버블정렬 완료");
 
    return 0;
}
 cs


선택정렬로 알려진 버블정렬

선택 정렬은 가장 앞의 숫자 부터 비교해서 제일 작은 숫자를 기억하여 최종적으로 교환합니다.


선택 정렬로 알려진 버블정렬은 첫 인덱스부터 비교를 하는데, 가장 작은 숫자가 나타나면 바로 교환한다. 그리곤 계속해서 비교합니다.


그에 비하여서 선택정렬은 마지막 인덱스까지 비교 한 후에 교환을 진행합니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<stdio.h>
 
int main(void){
    int nList[5= { 90501196041 };
    int num_case = 0;
 
    for (int i = 0; i < 4++i){
        for (int j = i+1; j < 5++j){
            if (nList[i] > nList[j]){    // 비교했을때 숫자가 작을경우는 넘어긴다
                num_case = nList[i];
                nList[i] = nList[j];
                nList[j] = num_case;
            }
        }
        printf("%d번째: ",i+1);
        for (int i = 0; i < 5; i++){
            printf("%d ", nList[i]);
        }
        putchar('\n');
    }
    for (int i = 0; i < 5; i++){
        printf("%d ", nList[i]);
    }
    putchar('\n');
 
    return 0;
}
cs




반응형

댓글