본문 바로가기
Language/C#

c# 배열의 개념이 들어간 버블정렬

by ninanio3 2011. 12. 24.
버블정렬에 관한 것은 http://cky5122.blog.me/80146758638 이곳에 굉장히 상세한 설명이 되어 있다. 배열의 수가 1부터 9까지 난잡하게 되어 있다면, 조건문을 돌면서 1,2,3,4,5,6,7,8,9 이런 식으로 정렬하는 것을 버블정렬이라고 한다. 굉장히 비효율적인 식이다. 하지만, 배열의 개념을 이해하는데 도움이 된다. 위의 블로그에 들어가면 상세한 설명이 잘 나와있다. 사실, 버블은 코딩보다는 개념을 이해하는게 더 중요한 것 같다. 물론, 어떤 프로그램이든 개념을 이해하는게 중요하다. ㅎㅎ; 여튼...

내가 만들던 소스가 날아가버렸다. -_-; 엄청 아깝네... 뭐가 어찌됐건, 밤을 샜건 완성을 했건, 날아가면 그만... 그래서 백업이 중요하다. 소스잃고 외양간도 고칠 힘이... ㅠㅠ 그냥 중요한 함수들만 넣어놓고 코딩은 생각나면 할랜다;;

if (m[j] > m[j + 1])
{
     int temp = m[j];
     m[j] = m[j + 1];
     m[j + 1] = temp;
}

여기서 값을 비교한 후 앞뒤를 바꾸게 된다.

뒤를 공부하다 보니깐, 버블정렬을 가지고 설명한 식들이 참 많다... 어쩔 수 없이, 소도 들여놓고 외양간도 고쳐놨다 ㅠㅠ 정신적인 스트레스로 인한 작업지체는 어쩌면 무한대로 발산할지도 모른다는 생각이 든다... 여튼... 백업이 중요하다;;

역시, 이건 배열을 쓰는 방법을 모르면, 힘들다. 안그래도 로직도 힘들어죽겄는데 배열쓰는법까지 모르면 괴로움의 이중고에 시달리게되는데, 의욕상실이다... ㅠㅠ 하지만... 이런 것들을 뚫어내고 이해하고 결론을 도출해 냈을 때의 즐거움이란... 많이많이 즐겁다. ㅋㅋ 그래서 더 빠져들게 되는 것 같다.

기본적으로 배열을 출력해줄 때는 for문을 돌려서 n[i] 를 출력해주는 형태로 가게 된다.
for(int i = 0; i < n.Length; i++)
{
     Console.WriteLine("{0}", n[i]);
}
뭐, 간단히 써보면 이런 형태다.
그리고 제일 어려웠던 것은 스와핑 해주는 부분이다. for문과 if문이 중첩으로 들어가있는데 조건문을 어떻게 넣어주어야 하는지, 그리고 숫자 1때문에 결과값이 참혹하게 달라진다....5가 맨 뒤로 가있질 않나, 3이 맨앞으로 나와있질않나 ㅋㅋㅋ 내가 생각해도 웃긴데, 직접 프로그래밍을 짜보면... 쉽지않다. ㅎㅎ

그럼 간단히 소스를 공개하도록... 하겠다.


  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using Com.JumBo.Logic;
  6. /*
  7.  * 문제 내용 : 6, 3, 8, 9, 2, 1, 4, 7, 5를 크기순으로 정렬하자.
  8.  * 학습 내용 : 1차원 배열을 버블 정렬로 정렬한다.
  9.  * 힌트 내용 : 배열이란 같은 타입의 나열(묶음)이다. 버블 정렬의 기본은 가장 큰 수를 가장 오른쪽으로 보내는 것이다.
  10.  * */
  11. namespace Console_Test
  12. {
  13.     public class Program
  14.     {
  15.         static void Main(string[] args)
  16.         {
  17.             int[] bubble = new int[] { 6, 3, 8, 9, 2, 1, 4, 7, 5 };
  18.             Calc.Print(bubble);
  19.             Console.WriteLine("위의 배열을 버블정렬을 해보자.");
  20.             Calc.Oper(bubble);
  21.         }
  22.     }
  23. }


  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace Com.JumBo.Logic
  7. {
  8.     public class Calc
  9.     {
  10.         public static void Oper(int[] n)
  11.         {
  12.             try
  13.             {
  14.                 //버블정렬... 반복문을 돌면서 앞뒤수를 계속 비교한다. 비교해서 앞수가 크면 뒤로 보낸다.
  15.                 for (int i = 0; i < n.Length - 1; i++)   //n의 갯수를 i와 비교하여 for문을 돌려라.
  16.                 {
  17.                     for (int j = 0; j < n.Length - 1 - i; j++)
  18.                     {
  19.                         if (n[j] > n[j + 1])
  20.                         {
  21.                             int temp = n[j];
  22.                             n[j] = n[j + 1];
  23.                             n[j + 1] = temp;
  24.                         }
  25.                     }
  26.                 }
  27.                 Print(n);
  28.             }
  29.             catch (Exception ex)
  30.             {
  31.                 Console.WriteLine(ex.ToString());
  32.             }
  33.         }
  34.         public static void Print(int[] n)
  35.         {
  36.             for (int k = 0; k < n.Length; k++)
  37.             {
  38.                 Console.Write("{0} ,", n[k]);
  39.             }
  40.             Console.WriteLine();
  41.         }
  42.     }
  43. }





이상... 난 자야된다. 지금 새벽 2시다. ㅋ

'Language > C#' 카테고리의 다른 글

c# xml 파일 파싱하기  (2) 2011.12.30
c# Boxing, UnBoxing  (0) 2011.12.30
c# do while문  (0) 2011.12.24
c# while문의 사용  (0) 2011.12.24
c# switch case 문  (0) 2011.12.20