선택정렬

비주얼C++/예제모음 2012. 11. 24. 20:48


선택정렬

 

  선택정렬은 두개의 포인터를 두고 한개는 현재위치를 한개는 나머지를 검색하면서 가장 작은 숫자를 찾는 것입니다. 예를 들어

 

  7 3 5 2 1 8 9 4 6 0

 

  이렇게 있을때

  처음 포인터를 7에 두고 뒤의 포인터를 3부터 0까지 검색하는 거지요.

  검색해서 가장 작은 숫자(여기서는 0)를 찾아서 7과 바꿔주는 겁니다. 그러면

 

   0 3 5 2 1 8 9 4 6 7

 

  이렇게 되겠지요?

  버블정렬에서는 가장 큰수가 맨뒤로 가는 것이 처음단계였다면 선택정렬에서는 가장 작은수가 앞으로 오는 것이 가장 첫단계가 되겠습니다.

 

  그다음에 현재 포인터를 두번째로 옮기고 (여기서는 3) 세번째부터 끝까지 검색하는 거지요. 그러면 5부터 7까지 검색이 되겠지요? 그 중에 1이 가장

작으니깐 1과 3을 바꿔줍니다.

 

  0 1 5 2 3 8 9 4 6 7

 

  이렇게 바뀌겠지요?

 

  이런 작업을 마지막까지 해주면 됩니다. 이해되시죠?

  그럼 소스를 볼까요?

 

{
 int min; // 최소수의 자릿수
 for (int j=0;j<9;j++) {
  min = j; // j 즉 위치포인터를 항상 가장 작다고 정해줍니다.
  for (int i=j+1;i<9;i++)
   if (num[min]>num[i]) min=i; // 위치포인터값과 검색포인터값을 비교해서 위치포인터값이 크면
   
        // 바꿔줍니다.
  int temp;
  temp = num[min];
  num[j] = num[min];
  num[min] = temp;
 };
 cout << "선택정렬후 : " << num[0] << " " << num[1] << " " << num[2] << " " << num[3] << " " << num[4] << " " << num[5] << " " << num[6] << " " << num[7] << " " << num[8] << " " << num[9] << "\n";
}

  이해가시리라 믿습니다. 이해안되시면 댓글이나 쪽지주세요~

'비주얼C++ > 예제모음' 카테고리의 다른 글

[C++] 완전수 찾기소스  (0) 2014.07.24
삽입정렬  (0) 2012.11.24
버블정렬  (0) 2012.11.24


설정

트랙백

댓글