Загрузка данных
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;
}
}