본문 바로가기
프로그래머의 길/알고리즘

버블 정렬 구현

by 제이콥케이 2007. 4. 2.
반응형

#include <stdio.h>
#define MAX 100

void zigzag(int *,int, int *, int *);
void main()
 {
   int table[MAX], num, rep_no, exchg_no,i;
   rep_no = exchg_no=0;

   printf("Input Data Number : ");
   scanf("%d", &num);

   printf("\n Input Data \n");
   for(i=0;i<num;i++)
    scanf("%d", table+i);

   printf("\n\n\t ======= SOURCE DATA ======= \n");
   for(i=0;i<num;i++)
  {
    if(i%10 == 0) printf("\n");
    printf("%6d", table[i]);
  }

   zigzag(table,num,&rep_no, &exchg_no);
   printf("\n\n\t\t ======= SORTED DATA =======\n");
  for(i=0;i<num;i++)
  {
    if(i%10 == 0) printf("\n");
    printf("%6d", table[i]);
   }
   printf("\n\n\t\t Repeat count : %5d\n", rep_no);
   printf("\t\t Exchange count : %5d\n", exchg_no);
  }

void zigzag(int *tbl, int count , int *cnt1, int *cnt2)
{
 int left, right, low, high, imsi, temp;

  low = 0;
  high= count -1;
  imsi = 0;
 do
 {
   for(left = low;left<high;left++)
   {
   if(tbl[left] > tbl[left+1])   //오름차순
     {
    temp = tbl[left];
    tbl[left] = tbl[left+1];
    tbl[left+1] = temp;
    ++*cnt2;
    imsi = left;
     };
    ++*cnt1;
   };
   high = imsi;
   for(right = high; right > low; right--)
   {
     if(tbl[right-1] > tbl[right])
      {
    temp = tbl[right - 1];
    tbl[right-1] = tbl[right];
    tbl[right] = temp;
    ++*cnt2;
    imsi = right;
      };
    ++*cnt1;
   }
   low = imsi;
  }
  while(low<high);
 }


일반 버블 정렬은 한쪽방향으로 실행한다.
이 소스는 양쪽으로 왔다갔다하면서 정렬하는 프로그램

반응형

'프로그래머의 길 > 알고리즘' 카테고리의 다른 글

합병 정렬(Merge Sort) 구현  (0) 2007.04.02
합병 정렬(Merge Sort)  (0) 2007.04.02
버블 정렬(Bubble Sort)  (0) 2007.04.02
후위식 계산기  (0) 2007.03.30
원형 큐 구현 소스  (0) 2007.03.29