C언어 문제
포인터를 이용해서 배열 요소 정렬
문제)
포인터를 이용해서 배열 요소를 정리하세요.
int array[10] = {8, 4, 6, 1, 2, 9, 3, 7, 5}
예상 출력 결과
정렬 전 배열 요소: 8 4 6 1 2 9 3 7 5
정렬 후 배열 요소: 1 2 3 4 5 6 7 8 9
포인터를 이용해서 배열의 요소를 오름차순으로 정렬해보겠습니다.
#include <stdio.h> //외부 함수 ascend 선언 [Call by Reference(int* a) & Call by Value(int count)] int ascend(int* a, int count); int main(void){ //배열 선언 및 초기화 int array[10] = {8, 4, 6, 1, 2, 9, 3, 7, 5 }; //배열의 전체 크기/자료형(int)의 크기 int count = sizeof(array)/sizeof(int); //ascend 함수 호출 ascend(array, count); return 0; } //외부 함수 정의(오름차순 정렬) int ascend(int* a, int count){ int i,j; int tmp; //임시 저장 변수 선언 for(i=0; i<count; i++){ for(j=i+1; j<count; j++){ if(*(a+i)>*(a+j)){ //*(a+i) 와 *(a+j) swap(변수 값 서로 교환) tmp = *(a+i); *(a+i) = *(a+j); *(a+j) = tmp; } } } int num; for(num=0; num<count; num++) printf("array[%d]: %d \n", num, *(a+num)); return 0; }
다음은 출력 결과입니다.
외부 함수 ascend를 정의합니다.
if(*(a+i)>*(a+j)){
tmp = *(a+i);
*(a+i) = *(a+j);
*(a+j) = tmp;
→ 배열 요소 두 개의 값 *(a+i)와 *(a+j)를 서로 비교했을 때
*(a+i)의 값이 *(a+j)의 값보다 크다면 *(a+i)를 임시 저장하기 위해 선언한 변수인 tmp에 저장합니다.
그리고 *(a+i)와 *(a+j)의 값을 서로 Swap(교환) 해줍니다.
Swap 부분이 잘 이해가 안 되신다면 설명이 잘 되어 있는 아래 동영상을 참고하시기 바랍니다.
외부함수 ascend를 선언하고 메인(main)함수에서 호출합니다.
외부 함수 ascend에서 출력을 해주고 있어서 메인 함수에서 따로 출력함수(prinf)를 사용하지 않아도 출력됩니다.
※참고
메인 함수에서 count는 배열의 전체 크기(4X10=40byte)/자료형(int)의 크기(4byte) = 10(배열 데이터값의 개수)입니다.
'Code.D IT 프로젝트 > C언어' 카테고리의 다른 글
[C언어 문제] 배열을 이용하여 입력받은 데이터 출력하기 (0) | 2017.06.13 |
---|---|
[C언어 문제] 입력받은 두 문자의 차이 구하기 (0) | 2017.06.12 |
[C언어 문제] 다이아몬드 출력하기(feat.모래시계) (0) | 2017.06.08 |
[C언어 문제] 아스키코드 출력하는 프로그램 (0) | 2017.06.08 |
[C언어 문제] 홀수의 합과 짝수의 합 구하기 (0) | 2017.06.07 |