선택정렬응용

 

 

 


#include <iostream>
#include <iomanip>  // 전처리기  setw() 필드 폭 설정

using namespace std;

void sel(int *a , int b);   //선택정렬

void print(int *a , int  b);    //출력

int main()

{
    int size;

 cout << "몇 개를 입력 할까요??"<< endl;  // 사이즈 입력
    cin >> size;


 int *A= new int[size];    // 사이즈 만큼 메모리 할당

 cout << setw(6)<<"임의로 받은 수" <<endl;  
 for(int x=0; x<size; x++)
    {
    A[x]=rand()%100;                 // 1~100사이의 임의의 수를 넣는다.
    cout <<setw(6)<< A[x];
    }
     cout <<endl;

 int len= size;      // 임의의 배열 크기 측정
   
 sel(A , len);   // 선택 정렬  <배열앞에 &을 붙이지 않아도 됨.>
                    //         <왜냐하면 배열의 이름은 첫번째 주소의 주소값을 나타내기 때문임.>
 print(A , len);    //출력     <배열 전달 시 포인터 나 배열로 받아야함!!>
  
    delete [] A;   // 메모리 해제
}

 

void sel(int *a , int b)
{

  for(int i =1; i <=b-1; i++)
  {

 int hold = a[i];
    int walker = i-1;

 while(walker >= 0 && hold< a[walker])
 {
  
    a[walker+1]=a[walker];
    walker=walker-1;
    cout << endl;
   
 }
 a[walker +1] = hold;
    cout << endl;
 

          for(int k=0; k<b; k++)
    {
   
      if(hold==a[k])
   {
    cout << setw(6)<< "<" ;
   }
   else if(hold== a[k])              //변화 단계 출력
   {
    cout << setw(6)<< "[";
   }
   cout << setw(6)<< a[k];
   if(hold== a[k])
    cout << setw(6) <<">";
   else if(hold == a[k])
   {
    cout << setw(6)<<"]";
   }
    

    }
   
  }  
}

void print(int *a, int  b)
{
 cout << endl;
 cout << "정렬완료"<< endl;
 for(int i=0; i<b; i++)        // 배열의 크기만큼 루프를 돌려 a[i]출력.
 {
 
  cout<< setw(6)<<a[i];  // 6만큼 필드 폭을 설정하여 a[i]출력.
     
 }
 cout << endl;

}

블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,