자격증/정보처리기사_실기
개선된 버블정렬
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