Untitled
unknown
plain_text
2 years ago
6.2 kB
11
Indexable
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package bianrysearch;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
/**
*
* @author ADMIN
*/
public class BianrySearch {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = InputNumberArray(); // Get the size of the array from user input.
int[] array = RandomArray(n); // Generate a random array of size 'n'.
System.out.println("Enter the search value: ");
int target = sc.nextInt(); // Get the target value from user input.
SelectionSort(array); // Sort the array using the Selection Sort algorithm.
PrintArray("Sorted array:", array); // Print the sorted array.
List<Integer> positions = BinarySearch(array, target); // Perform binary search and store positions.
if (positions.isEmpty()) {
System.out.println();
System.out.println(target + " does not exist");
} else {
System.out.println();
System.out.println("Found " + target + " at Index " + positions);
}
}
public static int InputNumberArray() {
Scanner scanner = new Scanner(System.in);
int size;
while (true) { // Start an infinite loop to keep asking for input until a valid value is provided.
try {
System.out.println("Input Number of Array : ");
size = Integer.parseInt(scanner.nextLine()); // Read the user's input and parse it as an integer.
if (size > 0) {
break;
// if size > 0 , valid value and loop break
} else {
System.out.println("You have to input a positive number , Reinpiut : ");
// iff size <= 0 , Display notice
}
} catch (NumberFormatException e) {
System.out.println("Invalid value , Reinput : ");
// if users input a special character , program will notice to users
}
}
return size;
}
public static int[] RandomArray(int ArraySize) {
// Create an integer array with the specified size 'ArraySize'.
int[] array = new int[ArraySize];
// Create a random object name random
Random random = new Random();
for (int i = 0; i < ArraySize; i++) {
array[i] = random.nextInt(ArraySize);
} // loop use to random each element of array
return array;
}
public static void PrintArray(String variable, int[] array) {
System.out.print(variable);
System.out.print("[");
// loop use to accessed each element of array and display them
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]);
if (i < array.length - 1) {
System.out.print(",");
}
}// print each element of the array
System.out.print("]");
}
public static void SelectionSort(int[] arr) {
int n = arr.length; // Get the length of the array.
for (int i = 0; i < n - 1; i++) {
int minIndex = i; // Assume the first unsorted element is the minimum.
// Find the minimum element in the unsorted part.
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
// Swap the minimum element with the first unsorted element.
int temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
}
public static List<Integer> BinarySearch(int[] array, int target) {
List<Integer> positions = new ArrayList<>(); // Create a list to store positions.
int left = 0; // Initialize the left pointer to the start of the array.
int right = array.length - 1; // Initialize the right pointer to the end of the array.
while (left <= right) { // Continue the loop until the left pointer is less than or equal to the right pointer.
int middle = left + (right - left) / 2; // Calculate the middle index.
if (array[middle] == target) { // Check if the middle element is equal to the target.
positions.add(middle); // If found, add the index to the positions list.
int LeftIndex = middle - 1; // Initialize a left index for searching on the left side.
int RightIndex = middle + 1; // Initialize a right index for searching on the right side.
// Search for additional occurrences of the target on the left side.
while (LeftIndex >= 0 && array[LeftIndex] == target) {
positions.add(LeftIndex); // Add the left index to the positions list.
LeftIndex--; // Move the left index to the left.
}
// Search for additional occurrences of the target on the right side.
while (RightIndex <= array.length - 1 && array[RightIndex] == target) {
positions.add(RightIndex); // Add the right index to the positions list.
RightIndex++; // Move the right index to the right.
}
return positions; // Return the list of positions where the target was found.
} else if (array[middle] < target) { // If the middle element is less than the target,
left = middle + 1; // Adjust the left pointer to search in the right half.
} else {
right = middle - 1; // Otherwise, adjust the right pointer to search in the left half.
}
}
return positions; // Return the list of positions (empty if the target was not found).
}
}
Editor is loading...