Programming/c언어 / / 2016. 6. 21. 18:40

c 언어 버블 정렬 알고리즘!

반응형






버블 정렬(Bubble Sort)



1.배열의 첫번째 요소와 두번재 요소의 대소관계를 비교한다


2. 대소관계에 따른 위치를 바꾼다.


3.비교하는 배열의 첨자를 하나씩 증가하여 1,2,번을 되풀이한다.


4.배열의 끝 요소까지 비교했으면 처음부터 위 작업을 반복하되 바로 앞에서


비교 했던 요소중 제일 마지막 첨자는 제외








(2) 기본 방법

인접한 두 자료
(a[i]a[i+1])를 비교하여 오름차순으로 저장되어 있지 않으면 교환



void bubble(int a[], int n)

{

    int i=n-1, j, tmp;


    while (i != 0)  {


        for (j=0; j <= i-1; j++) {


            if (a[j] > a[j+1]) {


                tmp = a[j];


                a[j] = a[j+1];


                a[j+1] = tmp;

            }

        }

        i--;

    }

}        

(1)기본유형 알고리즘

START

a[5]={5,3,1,2,4}

for i<-0 to 3 do

           for j <- 1 to 4 do

                     if (a[i] > a[j]) then

                                tmp=a[i]

                                a[i]=a[j]

                                a[j]=tmp

                     endif

           endfor

endfor

END





(2) 개선된 방법


한번의
pass동안 한번도 교환이 이루어지지 않으면 끝내도록 개선 


flag변수의 사용


void bubble(int a[], int n)

{

    int i=n-1, j, tmp ,flag = 1 ;


    while (flag &&i != 0)  {



        for (j=0; j <= i-1; j++) {


              if (a[j] > a[j+1]) {


flag = 1;


                    tmp = a[j]; a[j] = a[j+1]; a[j+1] = tmp;

              }

        }

        i--;

    }

}    

(2)중간에 종료 알고리즘

START

a[5]={5,3,1,2,4}

for i<-0 to 3 do

flag=1

for j<-1 to 4 do

     if(a[i]>a[j]) then

                tmp=a[i]

                a[i]=a[j]

                a[j]=tmp

                flag=0

     endif

endfor

if flag then break

endfor

END


버블 알고리즘 코딩


#include <stdio.h>




void bubble(int a[], int n)

{

    int i=n-1, j, tmp;


    while (i != 0)  {

        for (j=0; j <= i-1; j++) {

            if (a[j] > a[j+1]) {

                tmp = a[j];

                a[j] = a[j+1];

                a[j+1] = tmp;

            }

        }

        i--;

    }

}    

void display(int a[], int n)

{

int i;

printf("정렬:");

for(i=0;i<n;i++)

{

printf("%3d",a[i]);

}

printf("\n");

}

main()

{

int a[]={25,48,37,17,52,86,43};

int n=sizeof(a)/sizeof(int);

int i;


printf("버블 알고리즘!\n");

printf("기존 배열:");

for(i=0;i<n;i++)

{

printf("%3d",a[i]);

}

printf("\n");

bubble(a,n);

display(a,n);


}


반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유