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