1. 编写程序使用分治算法MINMAX求解数组的最小值和最大值,并用实际数组对数组进行测试。 2. 要求算法中

1. 编写程序使用分治算法MINMAX求解数组的最小值和最大值,并用实际数组对数组进行测试。 2. 要求算法中,第1张

#include <stdio.h>

void minmax(int array[], int begin, int end, int &min, int &max, int &count)

{

int mid = (begin + end)/2

if (begin == end)

{

count++

if (array[mid] <min) {

min = array[mid]

} else {

if (array[mid] >max)

max = array[mid]

count++

}

return

}

minmax(array, begin, mid, min ,max, count)

minmax(array, mid + 1, end, min ,max, count)

}

void main()

{

int array[10] = {9,8,7,6,5,4,3,2,1,0}

int min = array[0], max = -1, count = 0

minmax(array, 0,9,min,max,count)

printf("min = %d, max = %d, count = %d\n", min,max,count)

}

1、分治法不是用来求最大值最小值的。在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序)。

分治法的精髓:

分--将问题分解为规模更小的子问题;

治--将这些规模更小的子问题逐个击破;

合--将已解决的子问题合并,最终得出“母”问题的解。

2、求数组中的最大值和最小值,一般使用假设法,即假设数组的第1个元素为最大值,同时也是最小值,然后遍历数组,找到最大值和最小值。示例如下:

#include<stdio.h>

int main() 

int a[] = {1,2,3,4,5,6,7,8,9,10}

int max, min

max = min = a[0] //假设第1个元素即是最大值也是最小值。

int max_pos = 0, min_pos = 0

//遍历数组,找出数组a中的最大数和最小数

for (int inx=0 inx!=sizeof(a) / sizeof(int) ++inx) {

if (a[inx]> max) max = a[inx], max_pos=inx

else if (a[inx] < min) min = a[inx], min_pos=inx

}

printf("最大数:%d\t最小数:%d\n", max ,min )

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12049952.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存