使用更少的比较查找整数文本文件的最大值/最小值

问题描述 投票:0回答:0

我正在尝试找到一种有效的方法来查找整数文本文件的最大值/最小值。我也对如何计算总比较感到困惑。我的蛮力策略:

    Scanner scan = new Scanner( new File("input.txt") );
    int min,max;
    min=max=scan.nextInt(); 
        while ( scan.hasNextInt() )
        {
            int n= scan.nextInt();
                        if(n<min){
                            min=n;
                        }
                        if(n>max){
                            max=n;
                        }
        }

我认为这段代码在最好和最坏的情况下需要进行 2(n-1) 次比较。如有不妥请指正。 这是另一种方式:

while ( scan.hasNextInt() )
        {
            int n= scan.nextInt();
                        if(n<min){
                            min=n;
                        }
                        else if(n>max){
                            max=n;
                        }
        }

这有什么区别吗?如果整数按降序排列,则仅执行 if 语句。最好的情况是 (n-1) 次比较。最坏的情况还是 2(n-1)。 这是一种不同的方法:

int min,max;
min=max=scanner.nextInt();
   
    
    while (scanner.hasNextInt()) {
        int num1 = scanner.nextInt();
        
        
        
        if (scanner.hasNextInt()) {
            int num2 = scanner.nextInt();
           
            
            
            if (num1 < num2) {
                if (num1 < min) {
                    min = num1;
                }
                if (num2 > max) {
                    max = num2;
                }
            } else {
                if (num2 < min) {
                    min = num2;
                }
                if (num1 > max) {
                    max = num1;
                }
            }
        } else {
            // There is only one integer left in the file
            if (num1 < min) {
                min = num1;
            }
            if (num1 > max) {
                max = num1;
            }
        }
    }

我再次使用的最后一个成对算法我们有 (n-1) 个整数要比较,因为 1 个整数在开始时直接分配给最大值和最小值。蛮力对每个整数使用两次比较。这里我们对每对整数进行 3 次比较。 (exp: 比较 1:num1 < num2 comparison 2:num1 < min comparison 3:num2 > max) 所以总的比较是1.5(n-1)。但这假设文件中有奇数个整数。如果它是偶数,那么对于最后一个整数我们只会对那个整数进行 2 次比较。我如何计算这个的总比较?您还认为我对任何算法的其他计算是否正确?无论如何,在最坏的情况下,找到最小值/最大值的最佳方法似乎是成对算法。我知道还有其他方法可以使用递归、二进制或锦标赛方法来实现,但我只想使用简单的逻辑和我的 Java 技能。

java algorithm performance sorting comparison
© www.soinside.com 2019 - 2024. All rights reserved.