Vienna
4일차 (1) 본문
Q3. 버블 정렬(버전 2)의 아이디어는 배열이 정렬을 마쳤는지를 검사하는 데 응용할 수 있습니다. 전달받은 배열 a가 오름차순으로 정렬을 마쳤는지 검사하는 함수를 작성하세요. 이때 오름차순으로 정렬을 마친 상태라면 1, 그렇지 않으면 0을 반환하도록 하세요.
내 답변:
int is_sorted(const int a[], int n) {
for (int i = 0; i < n-1; i++) {
if (a[i] > a[i + 1]) return 0;
}
return 1;
}
a[i]가 a[i+1]보다 작은 게 하나라도 있다면 이후부터는 정렬 여부 검사를 하지 않아도 이미 오름차순으로 정렬된 게 아니라는 사실을 알 수 있다. 그러므로 중간에 탈출할 수 있도록 return 함수를 입력했다.
정답:
///*--- 버블 정렬 응용 ---*/
//int is_sorted(int a[], int n)
//{
// int i;
//
// for (i = n - 1; i > 0; i--)
// if (a[i - 1] > a[i])
// return 0;
// return 1;
//}
끝에서 부터 정렬 여부를 검사한다는 사실을 빼면 내 답변과 결은 동일하다. 하지만 프로그램을 로지컬하게 만들려면 정렬할 때와 똑같이 배열의 끝에서부터 검사하는 쪽이 더 좋을 것 같단 생각이 들었다.
'알고리즘 문제 풀이 > Do It! 자료구조와 함께 배우는 알고리즘 입문 C언어 편' 카테고리의 다른 글
5일차 (2) (0) | 2021.11.23 |
---|---|
5일차 (1) (0) | 2021.11.23 |
4일차 (4) (0) | 2021.11.22 |
4일차 (3) (0) | 2021.11.22 |
4일차 (2) (0) | 2021.11.22 |
Comments