내림차순 함수
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; // 비교한 내림차순으로 행 전체를 스왑
}
}
}
'공부 > 프로그래밍' 카테고리의 다른 글
[C++] 스왑 함수 로직 (0) | 2017.11.20 |
---|---|
[C++] 절대값 판별 함수 (0) | 2017.11.20 |
[C++] 포인터에 배열 넣는 것의 규칙 (0) | 2017.11.20 |
[C++] 행렬의 사칙연산 함수 배열 (0) | 2017.11.20 |
[C++] 평균 구하는 함수 리턴/포인터 (0) | 2017.11.20 |