관리 메뉴

사적공간

개선된 버블정렬 본문

자격증/정보처리기사_실기

개선된 버블정렬

2sac 2024. 4. 16. 20:19

버블정렬은 끝값부터 정렬한다.(매 회차마다 정렬된 값을 제외하고)

매 회차마다 처음부터 끝까지 이웃한 값을 비교하여 정렬하는데, 한번이라도 정렬이 일어나면 sw = 1,아니면 0임. 

0이면 모든 배열의 정렬이 완료되었으므로 break; 

/* 개선된 버블정렬 */
#include<stdio.h>
main()
{
    int n,i,j,sw,cnt,k;
    int data[5];
    n = -1;
    do{
        n++;
        scanf("%d", &data[n]);
    }while(n < 4);
    cnt = 0;
    for(i=1;i<=4;i++){ // 5개의 원소가 저장되어 있으므로 네 번 비교
    sw = 0; // 이전 회차에서 비교가 일어났는지 표시하는 값 1이면 한 번이상 비교 일어남 0이면 없음.
    for(j=0;j<=(4-i);j++){
        if(data[j]>data[j+1])
        {   
            k=data[j];
            data[j]=data[j+1];
            data[j+1]=k;
            cnt++; // 교환횟수 누적 
            sw=1;
        }
    }
    if(sw == 0) // 비교가 한 번도 일어나지 않았으므로 배열의 원소는 완전히 정렬되었으므로 반복문 탈출 
        break;
}
    printf("버블정렬 배열원소 교환횟수: %d\n",cnt);
    for(int x=0;x<=4;x++)
        printf("%d",data[x]);
}

6
9
2
3
4
버블정렬 배열원소 교환횟수: 6
23469

'자격증 > 정보처리기사_실기' 카테고리의 다른 글

합격  (0) 2024.06.18
시험후기  (0) 2024.04.29
버블정렬  (0) 2024.04.16
선택정렬  (0) 2024.04.16
보수 구하기  (0) 2024.04.09