package com.naman14.algovisualizer.algorithm.search; import android.app.Activity; import com.naman14.algovisualizer.LogFragment; import com.naman14.algovisualizer.algorithm.Algorithm; import com.naman14.algovisualizer.algorithm.DataHandler; import com.naman14.algovisualizer.visualizer.BinarySearchVisualizer; import java.util.ArrayList; import java.util.List; import java.util.Random; /** * Created by mayank on 27/11/16. */ public class LinearSearch extends Algorithm implements DataHandler { private BinarySearchVisualizer visualizer; private int[] array; private List<Integer> positions = new ArrayList<>(); public LinearSearch(BinarySearchVisualizer visualizer, Activity activity, LogFragment logFragment) { this.visualizer = visualizer; this.activity = activity; this.logFragment = logFragment; } public void setData(final int[] array) { activity.runOnUiThread(new Runnable() { @Override public void run() { visualizer.setData(array); } }); start(); prepareHandler(this); sendData(array); } private void search() { logArray("Array - ", array); int rnd = new Random().nextInt(array.length); int data = array[rnd]; addLog("Searching for - " + data); int n = array.length ; for (int i = 0 ; i<n ; i++) { highlight(0, i-1); highlightTrace(i); addLog("Searching at index - " + i); if (array[i] == data){ addLog("Result - True"); addLog("Value found at position - " + i); break; } addLog("Result - False"); sleep(); } completed(); } private void highlight(int minIndex, int maxIndex) { positions.clear(); for (int i = minIndex; i <= maxIndex; i++) { positions.add(i); } activity.runOnUiThread(new Runnable() { @Override public void run() { visualizer.highlight(positions); } }); } private void highlightTrace(final int pos) { activity.runOnUiThread(new Runnable() { @Override public void run() { visualizer.highlightTrace(pos); } }); } @Override public void onMessageReceived(String message) { if (message.equals(Algorithm.COMMAND_START_ALGORITHM)) { startExecution(); search(); } } @Override public void onDataRecieved(Object data) { this.array = (int[]) data; } }