목록분류 전체보기 (103)
Vienna
Q5. 연습문제 Q2(204쪽)와 마찬가지로 비교, 교환 과정을 자세히 출력하는 프로그램(실습 6-3)으로 수정하세요. 내 답변: 6-3과 같이 key와 last 변수를 추가했다. 그리고 교환이 일어날 때마다 last를 업데이트 하게 했다. 그래서 해당 패스에서 교환이 일어난 가장 작은 인덱스를 저장한다. 그럼 진행중인 패스의 검사를 마쳤을 때 a[0]부터 a[last] 까지는 정렬된 상태일 것이다. 즉, 다음 패스에서 그 사이의 인덱스는 검사할 필요가 없다. 하지만 last 변수는 다음 패스에서 다시 초기화가 진행되기 때문에 패스가 끝나기 전에 key 변수에 last의 값을 대입시킨다. 그리고 매 패스는 key까지만 검사를 진행하게 된다. void bubble(int a[], int n) { int i..
Q4. 버블 정렬(버전 2)을 연습문제 Q2(204쪽)처럼 비교, 교환 과정을 자세히 출력하는 프로그램으로 수정하세요. 내 답변: Q2에서 쓴 답변에서 크게 바꾸지는 않았다. 해당 패스에서 교환횟수가 0인지 여부를 언제 확인할지 고민해봤는데, 정렬이 된 순간 exit(1)을 써서 탈출하면 비교 횟수와 교환 횟수가 뜨지 않기 때문에 검사 중인 패스는 모두 끝마치고 확인하는 것으로 하고 break를 써서 for 문을 탈출 시켰다. void bubble(int a[], int n) { int count_swap = 0, count_cmp = 0; for (int i = 0; i ..
Q3. 버블 정렬(버전 2)의 아이디어는 배열이 정렬을 마쳤는지를 검사하는 데 응용할 수 있습니다. 전달받은 배열 a가 오름차순으로 정렬을 마쳤는지 검사하는 함수를 작성하세요. 이때 오름차순으로 정렬을 마친 상태라면 1, 그렇지 않으면 0을 반환하도록 하세요. 내 답변: int is_sorted(const int a[], int n) { for (int i = 0; i a[i + 1]) return 0; } return 1; } a[i]가 a[i+1]보다 작은 게 하나라도 있다면 이후부터는 정렬 여부 검사를 하지 않아도 이미 오름차순으로 정렬된 게 아니라는 사실을 알 수 있다. 그러므로 중간에 탈출할 수 있도록 return 함수를 입력했다. 정답: ///*--..