求数组的最大值或者最小值,将数组排序

文章介绍了如何使用穷举法求解数组的最大值,通过逐个比较元素实现;另外展示了使用排序方法,以及利用Java的Arrays工具类快速排序并获取最大值。作者推荐直接使用Arrays工具类以提高效率。

1.穷举法,求数组元素最大值

将各个元素都相互比较然后取最大的一个

我们假设数组为{10,24,55,21,13,23}这里不难看出10是最小值,穷举法就是将各个数组相互比较所以,我们假设10为最大的数组元素,与24比较,24比10大则我们就将24看为最大的元素,同理24在于55比较,55大于24所以我们又将55当做最大的元素,以此类推

/**
 * 求数组中元素最大的数-穷举法
 */
public class ArrText02 {
    public static void main(String[] args) {
        int[] arr = new int[]{10,24,55,21,13,23};
        //求数组arr中元素的最大值
        int max = arr[0];
        //假设数组的第一个数为最大值

        for (int i = 0; i < arr.length; i++) {
            //循环遍历每一个元素
            if(max < arr[i]){//如果第一个元素小于其他元素
                max = arr[i];
                //将其他元素赋给max
            }
        }
        System.out.println("该数组最大值"+max);
    }
}

2.排序

很简单将数组的元素从小到大(从大到小)排序然后打印最后一个(第一个)元素就是数组的最大(最小值了)

/**
 * 将数组从大到小排列-交换法
 */
public class Arrange {
    public static void main(String[] args) {
        int[] arr = {67,24,34,45,64};
        //排列前的数组
        soundMax(arr);
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + "\t");
            System.out.println(arr[0]);
        }
    }
    static void soundMax(int[] arr){

        for (int i = 0;i < arr.length;i++) {//对数组进行遍历找到最大值的坐标
            int max = i;//用来存放最大值的下标
            for(int j= i;j< arr.length;j++){
                if (arr[max]<arr[j]){//如果数组的最大值小于另一个元素
                    max = j;//就将该元素的下标赋给max
                }
            }
            if (i != max) {//上面的max=j执行、就将当前索引i与max的值交换
                int temp = arr[i];
                arr[i] = arr[max];
                arr[max] = temp;
            }
        }
    }
}


3,当然也可以用Arrays工具类来完成,

Arrays是别人帮我分装好了的类所以我们可以直接拿来用

import java.util.Arrays;

/**
 * Array工具类—排列数组
 */
public class ArrayText {
    public static void main(String[] args) {
        int[] arr = {67,24,34,45,64};
        Arrays.sort(arr);//引用Arrays类中的sort方法
        System.out.println(Arrays.toString(arr));
    }
}

总的来说我们一般用第3种就好啦, 因为代码简单都是大佬们总结好的方法我们自己写的也不一定有别人写得好,所以直接拿过来用就行了。

 

 

<think>我们要解一个double数组最大值最小值的差值。根据引用[1]、[2]、[4]、[5]中的方法,我们可以总结出以下步骤: 1. 遍历数组,找到最大值。 2. 遍历数组,找到最小值。 3. 计算差值:最大值 - 最小值。 注意:引用[2]和[5]中提供了差值的函数,但引用[2]中在排序的同时差值,而引用[5]中则分别最大值最小值差。 我们更推荐分别最大值最小值的方法,因为排序会改变原数组,而且时间复杂度较高(O(n) vs O(n log n))。 因此,我们设计一个函数,传入double数组数组长度,返回最大值最小值的差值。 步骤: 1. 初始化最大值最小值数组的第一个元素。 2. 遍历数组,更新最大值最小值。 3. 返回最大值最小值。 注意:数组长度应该大于0,否则需要处理异常情况(例如返回0或者特殊值,但这里我们假设数组至少有一个元素)。 根据引用[1]中的max和min函数,我们可以这样写: double max = a[0]; double min = a[0]; for (int i=1; i<len; i++) { if (a[i] > max) max = a[i]; if (a[i] < min) min = a[i]; } double diff = max - min; 将上述步骤封装成函数。 下面给出完整的示例代码: </think> ### C语言double数组最大值最小值差值的方法 在C语言中,double数组最大值最小值的差值可以通过以下步骤实现: #### 核心算法实现 ```c #include <stdio.h> // 计算数组最大值最小值的差值 double calc_range(double arr[], int len) { if (len <= 0) return 0; // 处理空数组情况 double max_val = arr[0]; double min_val = arr[0]; // 单次遍历同时找出最大值最小值 for (int i = 1; i < len; i++) { if (arr[i] > max_val) max_val = arr[i]; if (arr[i] < min_val) min_val = arr[i]; } return max_val - min_val; // 返回差值 } int main() { double data[] = {3.14, 1.618, 2.718, 1.414, 0.577}; int size = sizeof(data) / sizeof(data[0]); double range = calc_range(data, size); printf("最大值最小值的差值: %.6f\n", range); return 0; } ``` #### 关键点说明: 1. **单次遍历算法** 通过一次遍历同时找出最大值最小值,时间复杂度为$O(n)$,效率高于排序方法: ```c for (int i = 1; i < len; i++) { if (arr[i] > max_val) max_val = arr[i]; if (arr[i] < min_val) min_val = arr[i]; } ``` 2. **边界条件处理** 添加数组长度检查防止空数组访问: ```c if (len <= 0) return 0; // 安全防护 ``` 3. **精度控制** 使用`%.6f`格式说明符控制输出精度,确保浮点数显示合理 #### 与排序方法的对比 引用[2][5]中的排序法虽然可行,但效率较低($O(n\log n)$),且会修改原数组: ```c // 不推荐的排序方法(效率低) void sort_and_range(double arr[], int len) { // 排序操作会改变原数组 for(int i=0; i<len; i++) { for(int j=i+1; j<len; j++) { if(arr[i] > arr[j]) { double temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } return arr[len-1] - arr[0]; // 返回差值 } ``` #### 优化技巧 1. **使用指针提高效率**: ```c double* ptr = arr; for (int i = 0; i < len; i++, ptr++) { if (*ptr > max_val) max_val = *ptr; if (*ptr < min_val) min_val = *ptr; } ``` 2. **处理特殊值**: ```c #include <math.h> // 跳过NaN(非数字)值 for (int i = 0; i < len; i++) { if (isnan(arr[i])) continue; // ... 比较逻辑 } ``` 3. **多线程优化(大型数组)**: ```c #include <pthread.h> // 将数组分段,多个线程并行查找局部极值 // 最后合并结果(适合超大型数组) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值