Извините, если форматирование плохое. Вопрос и код ниже. Я столкнулся с этой проблемой алгоритма массива, и я застрял на том, как ее решить. Я думал о сортировке массива, а затем итерации по нему, но я застрял. Любые указатели / решения для этого?
Напишите программу, которая, учитывая массив из N различных целых чисел и число K, будет определять статистику порядка K c массива. K является целым числом от 1 до N: 1 ≤ k ≤ n. K order statisti c - это K наименьшая запись в массиве. Таким образом, N order statisti c - это просто максимальное значение в наборе. Медиана, другими словами, средний элемент, это n / 2 order statisti c.
Input: первая строка ввода будет содержать порядок statisti c kk для определения. Вторая строка ввода будет содержать разделенный пробелами массив целых чисел, который будет использоваться для статистического набора. Например:
3
5 2 9 7
Выход: целое число, которое определяется как kk порядка статистики c данного массива. Например: 7
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Collections;
// k = low
// n = high
// median = n/2
// QuickSelect
public class Main {
int low;
int high;
int[] arr;
public static int partition(int[] arr, int low, int high){
int pivot = arr[high];
pivotloc = low;
for (int i = low; i <= high; i++){
if(arr[i] < pivot){
int temp = arr[i];
arr[i] = arr[pivotloc];
arr[pivotloc] = temp;
temp++;
}
}
int temp = arr[high];
arr[high] = arr[pivotloc];
arr[pivotloc] = temp;
return temp;
}
public static int kSmallest(int k, int low, int high int[] arr){
int partition = partition(arr,low,high);
if (partition == k){
return arr[partition];
}
else if (partition < k) {
return kSmallest(arr, partition + 1, k);
}
else {
return kSmallest(arr, low, partition - 1, k);
}
}
public static void main(String[] args) throws IOException {
InputStreamReader reader = new InputStreamReader(System.in, StandardCharsets.UTF_8);
BufferedReader in = new BufferedReader(reader);
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
int[] array = new int[5, 2, 9, 7];
int[] arraycopy = new int[5, 2, 9, 7];
int kPosition = 3
int length = array.lnegth;
if (kPosition > length){
System.out.println("Index out of bound");
}else {
System.out.println("Smallest element in array:" + kSmallest(arraycopy, 0, length - 1, kPosition-1));
}
}
}