Загрузка данных



public class Main {
    public static void main(String[] args) {
        HighArray arr = new HighArray(100);
        arr.addValue(10);
        arr.addValue(20);
        arr.addValue(30);
        arr.addValue(40);
        arr.addValue(50);
        arr.addValue(60);
        arr.addValue(70);
        
        arr.addValue(55);   
        arr.addValue(55); 
        arr.printArray();
    /* 
        System.out.println("Максимум: " + arr.getMax());
        System.out.println("Минимум: " + arr.getMin());
        System.out.println("Среднее: " + arr.getAverage());
    */  
        arr.findValue(10);
        arr.findValue(11);
        
        System.out.println();
        
        arr.deleteValue(70);
        arr.deleteValue(777);
        arr.printArray();
        
        // Проверяем бинарный поиск
        System.out.println("\nБинарный поиск:");
        System.out.println("Позиция 20: " + arr.binarySearch(20));
        System.out.println("Позиция 666: " + arr.binarySearch(666));
        //System.out.println(arr.binarySearch(10));
    }
}

class HighArray {
    private int[] arr;
    private int count;
    
    public HighArray(int size) {
        arr = new int[size];
        count = 0;
    }
    
    public int getCount() {
        return count;
    }
    
    public void printArray() {
        for (int i = 0; i < count; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
    }
/*    
    public int getMax() {
        if (count == 0) return 0;
        int max = arr[0];
        for (int i = 1; i < count; i++) {
            if (arr[i] > max) max = arr[i];
        }
        return max;
    }
    
    public int getMin() {
        if (count == 0) return 0;
        int min = arr[0];
        for (int i = 1; i < count; i++) {
            if (arr[i] < min) min = arr[i];
        }
        return min;
    }
    
    public double getAverage() {
        if (count == 0) return 0;
        double sum = 0;
        for (int i = 0; i < count; i++) {
            sum += arr[i];
        }
        return sum / count;
    }
*/   //вставка с сохр. порядком
    public void addValue(int value) {

        int pos = 0;
        while (pos < count && arr[pos] < value) {
            pos++;
        }
        
        for (int i = count; i > pos; i--) {
            arr[i] = arr[i-1];
        }
        
        arr[pos] = value;
        count++;
    }
    
    //поиск с остановкой
    public void findValue(int value) {
        int position = -1;
        for (int i = 0; i < count; i++) {
            if (arr[i] == value) {
                position = i+1;
                break;
            }
            
            if (arr[i] > value) {
                break;
            }
        }
        if (position == -1) System.out.println("Значение " + value + " не найдено");
        else System.out.println("Значение " + value + " найдено. Позиция: " + position);
    }
    
    //удаление с остановкой
    public void deleteValue(int value) {
        int position = -1;
        for (int i = 0; i < count; i++) {
            if (arr[i] == value) {
                position = i;
                break;
            }

            if (arr[i] > value) {
                break;
            }
        }
        if (position == -1) System.out.println("Значение " + value + " не найдено для удаления");
        else {
            for (int i = position; i < count-1; i++) {
                arr[i] = arr[i+1];
}
            count--;
            System.out.println("Значение " + value + " удалено на позиции: " + (position+1));
        }
    }
    
    //двоичный поиск
    public int binarySearch(int value) {
        int left = 0;
        int right = count - 1;
        
        while (left <= right) {
            int mid = (left + right) / 2;
            
            if (arr[mid] == value) {
                return mid + 1;
            }
            
            if (arr[mid] < value) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        
        return -1;
    }
}