본문 바로가기

공부/프로그래밍

[C++] 내림차순,오름차순 정렬 로직


내림차순 함수 

void sort(double[],int);

void sort(double array[], int n)                         // 배열과 배열 원소 개수 입력 받기

{

       int temp, i, j, temp2;

for(i=0; i<n-1; i++)                               // 기준은 마지막 원소 전까지 잡고 비교하면 되므로 n-1을 쓴다.

  {

temp = i;                                            // 기준 삼기

for( int j=i+1; j<n; j++)                           // 기준 원소를 제외하고 마지막 원소까지 

{

if( array[ j ] > array[ temp ] )            // 크기 비교

{ temp = j; }

}


temp2 = array[ i ];

array[ i ] = array[ temp ];

array[ temp ] = temp2;                  // 스왑

  } 

}


간단히 설명하면 첫번째 원소를 기준으로 삼고 나머지와 전부 비교해 제일 큰 값을 구별해 내고 그것과 스왑,

나머지 원소들도 똑같이 해서 큰값을 제일 앞으로 작은 값을 제일 멀리 보내주는 로직입니다.

맨 앞의 원소는 나머지 전부와 그 다음 원소는 첫 번째 원소를 제외하고 나머지, 

세 번째 원소는 두 번째까지를 제외하고 나머지.. 이렇게 비교하기 때문에

제일 큰 값이 첫 번째로 오고 순서대로 나열되게 됩니다.

오름차순으로 하고 싶으면

if( arrray[ j ] > array[ temp ] ) 을

if( arrray[ j ] < array[ temp ] ) 으로 바꿔주면 오름차순으로 정렬됩니다.


+ 만약 이차원 배열이고 기준으로 삼은 한 열을 기준으로 행을 스왑시키려면


void sort(double[][m], int);


void sort(double array[][ m ], int n)                                 // m은 배열의 열의 개수로 숫자로 미리 넣어줘야 한다. int n은 행의 개수

{                                       

        int i, j, s, temp, temp2, o=(비교하려는 열 번호);

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

 {

temp = i;

for( j=i+1; j<n; j++ )

{

if(array[ j ][ o ]>array[ temp ][ o ])                 // 특정 열의 대소를 비교

{ temp = j; } 

}

    for(s=0; s<n-1; s++)

    {

temp2 = array[ i ][ s ];

array[ i ][ s ] = array[ temp ][ s ];

array[ temp ][ s ] = temp2;                                   // 비교한 내림차순으로 행 전체를 스왑

    }

 }

}



728x90