最优合并问题

来源:互联网 发布:全国路网shp数据下载 编辑:程序博客网 时间:2024/05/29 02:46

给定k个排好序的序列s1,s2,…,sk,用2路合并算法将这k个序列合并成一个序列。假设所采用的2路合并算法合并两个长度分别为m和n的序列需要m+n-1次比较。试设计一个算法确定合并这个序列的最优合并顺序,使所需要的总比较次数最少。


#include<stdio.h>#define n 4int min(int *a){int b[n];int i,j,k;int result = 0;int count = n;int temp;for(i = 0;i < n;i ++){b[i] = a[i];}while(count > 1){for(i = 0;i < count;i ++){for(j = i + 1;j < count;j ++){if(b[i] > b[j]){temp = b[i];b[i] = b[j];b[j] = temp;}}}b[0] = b[1] + b[0];result += b[0] - 1;for(i = 1;i < count - 1;i ++){b[i] = b[i + 1];}count --;}return result;}int max(int *a){int b[n];int i,j,k;int result = 0;int count = n;int temp;for(i = 0;i < n;i ++){b[i] = a[i];}while(count > 1){for(i = 0;i < count;i ++){for(j = i + 1;j < count;j ++){if(b[i] < b[j]){temp = b[i];b[i] = b[j];b[j] = temp;}}}b[0] = b[1] + b[0];result += b[0] - 1;for(i = 1;i < count - 1;i ++){b[i] = b[i + 1];}count --;}return result;}int main(){int a[n] = {5,12,11,2};printf("the minimum is %d.",min(a));printf("the maximum is %d.",max(a));return 0;} 


0 0
原创粉丝点击