개인 서재..*/알고리즘
[C언어] 버블 정렬(Bubble Sort)
낭만붕어빵
2017. 4. 24. 17:39
반응형
정렬 알고리즘의 일종.
성능이 몹시 구리다.
비교해야하는 데이터의 크기가 N개라고 치면 총 N(N-1)/2 번 의 비교가 수행됨
-----------------------------------------
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 31 32 33 34 35 | #include <stdio.h> // 총 비교 횟수 = (n-1) + (n-2) + (n-3) + .... + 3 + 2 + 1 void BubbleSort(int DataSet[],int Length){ int i=0,j=0,temp=0; for(i=0;i<Length-1;i++){ // 총 몇번 전체 틀이 돌아갈 것이냐 (총 항의 갯수) for(j=0;j<Length-(i+1);j++){ // 한번의 틀 당 총 몇번의 비교를 할 것이냐 (각 항의 숫자) if(DataSet[j]>DataSet[j+1]){ temp=DataSet[j]; DataSet[j]=DataSet[j+1]; DataSet[j+1]=temp; } } } } int main(){ int DataSet[]={6,4,2,3,1,5}; int Length=sizeof(DataSet)/sizeof(DataSet[0]); int i=0; BubbleSort(DataSet,Length); for(i=0;i<Length;i++){ printf("%d ", DataSet[i]); } printf("\n"); 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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #include <stdio.h> // 총 비교 횟수 = (n-1) + (n-2) + (n-3) + .... + 3 + 2 + 1 int flag=0; void BubbleSort(int DataSet[],int Length){ int i=0,j=0,temp=0; for(i=0;i<Length-1;i++){ // 총 몇번 전체 틀이 돌아갈 것이냐 (총 항의 갯수) for(j=0;j<Length-(i+1);j++){ // 한번의 틀 당 총 몇번의 비교를 할 것이냐 (각 항의 숫자) if(DataSet[j]>DataSet[j+1]){ temp=DataSet[j]; DataSet[j]=DataSet[j+1]; DataSet[j+1]=temp; flag=1; } } //비타민퀴즈 : 이미 정렬되어있으면 루프 취소하고 빠져나오게끔 버블 알고리즘을 개선하라 if(flag==0){ printf("이미 정렬되어있는 배열입니다.\n"); return; } } } int main(){ int DataSet[]={1,2,3,4,5,6}; int Length=sizeof(DataSet)/sizeof(DataSet[0]); int i=0; BubbleSort(DataSet,Length); for(i=0;i<Length;i++){ printf("%d ", DataSet[i]); } printf("\n"); return 0; } | cs |
반응형