알고리즘(3판)(FOUNDATION OF ALGORITHMS USING C++ PSEUDOCODE) 2장 예제코드 및 연습문제
- 최초 등록일
- 2016.09.15
- 최종 저작일
- 2015.04
- 12페이지/
한컴오피스
- 가격 1,000원
![할인쿠폰받기](/images/v4/document/ico_det_coupon.gif)
소개글
알고리즘(3판)(FOUNDATION OF ALGORITHMS USING C++ PSEUDOCODE) 2장 예제코드 및 연습문제
*연습문제는 1번, 2번, 3번, 19번만 포함되어 있습니다. 착오 없으시길 바랍니다.
목차
1. 이항계수 구하기
1-1. 분할 정복법
1-2. 동적 계획법
2. 이분검색
3. 합병정렬
4. 빠른정렬
5. 플로이드 알고리즘
6. II 연습문제
본문내용
문제: n 개 키를 비내림차순으로 정렬
입력: 양의 정수 n, 키의 배열 S(첨자는 1부터 n까지)
출력: 키가 비내림차순으로 정렬된 배열 S
void mergesort(int n, keytype S[]){
if (n>1) {
const int h = ⌊n/2⌋, m = n - h;
keytype U[1..h], V[1..m];
copy S[1] through S[h] to U[1] through U[h];
copy S[h+1] through S[n] to V[1] through V[m];
mergesort(h, U);
mergesort(m, V);
merge(h, m, U, V, S);
}
}
문제: 2개의 정렬된 배열을 하나의 정렬된 배열로 합병
입력: 양의 정수 h와 m, 정렬된 키의 배열 U(1부터 h까지), 정렬된 키의 배열 V(1부터 m까지)
출력: U와 Ω의 키들을 모두 포함하여 정렬된 배열 S(1부터 h+m까지)
void merge(int h, int m, const keytype U[], const keytype V[], keytype S[]){
index i = 1, j = 1, k = 1;
while ( i<=h && j<=m ) {
if( U[i] < V[j] ){
S[k] = U[i];
i++;
}else{
S[k] = V[j];
j++;
}
if( i>h ) copy V[j] through V[m] to S[] through S[h+m];
else copy U[i] through U[h] to S[] through S[h+m];
ㆍ코드
void MergeSort( int n, int *s);
void Merge( int h, int m, const int *u, const int *v, int *s );
void main(){
int s[] = {27,10,12,20,25,13,15,22}, i;
MergeSort(8, s);
참고 자료
없음