首页 > 编程语言 > 详细

数据算法:分治法 ,Demo随机生成数组输出最大最小值

时间:2020-01-16 14:41:30      阅读:73      评论:0      收藏:0      [点我收藏+]

分治法递归函数:

 1 void PartionGet(int starA, int endA, int *meter, int *max, int *min)/* 分治法获取最优解 */
 2 {
 3     /* 参数:
 4     * s 当前分治段的开始下标
 5     * e 当前分治段的结束下标
 6     * meter 表的地址
 7     * max 存储当前搜索到的最大值
 8     * min 存储当前搜索到的最小值  */
 9 
10     if (endA - starA <= 1)   /* 获取局部解,并更新全局解 */
11     {
12         if (meter[starA] > meter[endA])
13         {
14             if (meter[starA] > *max)
15             {
16                 *max = meter[starA];
17             }
18 
19             if (meter[endA] < *min)
20             {
21                 *min = meter[endA];
22             }
23         }
24         else
25         {
26             if (meter[endA] > *max)
27             {
28                 *max = meter[endA];
29             }
30 
31             if (meter[starA] < *min)
32             {
33                 *min = meter[starA];
34             }
35         }
36 
37         return;
38     }
39 
40     int i;
41     i = starA + (endA - starA) / 2; /* 不是子问题继续分治,这里使用了二分,也可以是其它 */
42     PartionGet(starA, i, meter, max, min);
43     PartionGet(i + 1, endA, meter, max, min);
44 }

调用

 1 int main()
 2 {
 3 #define MM 30
 4     int ii, meter[MM];
 5     int max = INT_MIN; /* 用最小值初始化 */
 6     int min = INT_MAX; /* 用最大值初始化 */
 7     printf("#define INT_MIN:%d   INT_MAX:%d \n\n", INT_MIN, INT_MAX);
 8     printf("The array‘s element as followed--->RAND_MAX:%d \n\n", RAND_MAX);
 9     srand(time(0)); /* 初始化随机数发生器 */
10 
11     for (ii = 0; ii < MM; ii++)   /* 随机数据填充数组 */
12     {
13         meter[ii] = rand() % 10000;
14 
15         if (!((ii + 1) % 10)) /* 输出表的随机数据,控制分行,首输出带换行*/
16         {
17             printf("%-6d\n", meter[ii]);
18         }
19         else
20         {
21             printf("%-6d", meter[ii]);
22         }
23     }
24 
25     PartionGet(0, MM - 1, meter, &max, &min); /* 分治法获取最值 */
26     printf("\nMax : %d\nMin : %d\n", max, min);
27     printf("\n\n\n------------------------------------------------\n\n\n");
28     system("pause");
29     return 0;
30 
31 }

数据算法:分治法 ,Demo随机生成数组输出最大最小值

原文:https://www.cnblogs.com/qq8533/p/12200148.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!