From 85d8b05508340a5dc20efcbe3099630ea7d16dde Mon Sep 17 00:00:00 2001 From: Naman Dwivedi Date: Fri, 18 Nov 2016 15:49:55 +0530 Subject: [PATCH 01/15] fix link in readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8b446df..cb645fd 100644 --- a/README.md +++ b/README.md @@ -33,8 +33,8 @@ Binary Search | BSTAlgorithm | BSTVisualizer Linked List | LinkedList | LinkedListVisualizer Stack | Stack | StackVisualizer -Breadth first search | GraphTraversal| DirectedGraphVisualizer -Depth first search | GraphTraversal| DirectedGraphVisualizer +Breadth first search | GraphTraversal| DirectedGraphVisualizer +Depth first search | GraphTraversal| DirectedGraphVisualizer Dijkstara | DijkstraAlgorithm | WeightedGraphVisualizer Bellman Ford | BellmanFord | WeightedGraphVisualizer Bubble Sort | BubbleSort | SortingVisualizer From c4593c62be5dc61f83c0c3e110d5d9403f951527 Mon Sep 17 00:00:00 2001 From: amit Date: Mon, 21 Nov 2016 02:09:54 +0530 Subject: [PATCH 02/15] added selection sort --- app/src/main/assets/desc.json | 12 ++++ .../naman14/algovisualizer/AlgorithmCode.java | 19 ++++++ .../naman14/algovisualizer/CodeFragment.java | 3 + .../naman14/algovisualizer/MainActivity.java | 4 +- .../algovisualizer/VisualAlgoFragment.java | 7 +++ .../algovisualizer/algorithm/Algorithm.java | 1 + .../algorithm/sorting/SelectionSort.java | 63 +++++++++++++++++++ 7 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/naman14/algovisualizer/algorithm/sorting/SelectionSort.java diff --git a/app/src/main/assets/desc.json b/app/src/main/assets/desc.json index d4e0a81..0df944f 100644 --- a/app/src/main/assets/desc.json +++ b/app/src/main/assets/desc.json @@ -69,6 +69,18 @@ "SortingVisualizer" ] }, + "selection_sort": { + "Selection Sort": "The selection sort algorithm sorts an array by repeatedly finding the minimum element (considering ascending order) from unsorted part and putting it at the beginning", + "Complexity": { + "Time": "worst O(n^2), best O(n^2), average O(n^2)", + "Space": "worst O(1) auxiliary" + }, + "References": [ + "Wikipedia
", + "SelectionSort", + "SortingVisualizer" + ] + }, "linked_list": { "Singly linked list": "A Linked List is a linear collection of data elements, called nodes, each pointing to the next node by means of a pointer. It is a data structure consisting of a group of nodes which together represent a sequence. Under the simplest form, each node is composed of data and a reference (in other words, a link) to the next node in the sequence. ", "Complexity": { diff --git a/app/src/main/java/com/naman14/algovisualizer/AlgorithmCode.java b/app/src/main/java/com/naman14/algovisualizer/AlgorithmCode.java index 550e3e4..20ca314 100644 --- a/app/src/main/java/com/naman14/algovisualizer/AlgorithmCode.java +++ b/app/src/main/java/com/naman14/algovisualizer/AlgorithmCode.java @@ -46,6 +46,25 @@ public class AlgorithmCode { " addLog(\"Array has been sorted\");\n" + " completed();"; + public static final String CODE_SELECTION_SORT = " logArray(\"Original array - \", array);\n" + + "\n" + + " int n = array.length;\n" + + " for (int j = 0; j < n-1; j++) {\n" + + " int min_idx = j;\n" + + " for(int i=j+1;i heading2 = new ArrayList(); heading2.add("Bubble Sort"); heading2.add("Insertion Sort"); - + heading2.add("Selection Sort"); List heading3 = new ArrayList(); heading3.add("BST Search"); heading3.add("BST Insert"); diff --git a/app/src/main/java/com/naman14/algovisualizer/VisualAlgoFragment.java b/app/src/main/java/com/naman14/algovisualizer/VisualAlgoFragment.java index e66a594..17f9ff7 100644 --- a/app/src/main/java/com/naman14/algovisualizer/VisualAlgoFragment.java +++ b/app/src/main/java/com/naman14/algovisualizer/VisualAlgoFragment.java @@ -40,6 +40,7 @@ import com.naman14.algovisualizer.algorithm.search.BinarySearch; import com.naman14.algovisualizer.algorithm.sorting.BubbleSort; import com.naman14.algovisualizer.algorithm.sorting.InsertionSort; +import com.naman14.algovisualizer.algorithm.sorting.SelectionSort; import com.naman14.algovisualizer.algorithm.tree.bst.BSTAlgorithm; import com.naman14.algovisualizer.visualizer.AlgorithmVisualizer; import com.naman14.algovisualizer.visualizer.ArrayVisualizer; @@ -176,6 +177,12 @@ public void setupFragment(String algorithmKey) { algorithm = new InsertionSort((SortingVisualizer) visualizer, getActivity(), logFragment); ((InsertionSort) algorithm).setData(DataUtils.createRandomArray(15)); break; + case Algorithm.SELECTION_SORT: + visualizer = new SortingVisualizer(getActivity()); + appBarLayout.addView(visualizer); + algorithm = new SelectionSort((SortingVisualizer) visualizer, getActivity(), logFragment); + ((SelectionSort) algorithm).setData(DataUtils.createRandomArray(15)); + break; case Algorithm.BST_SEARCH: visualizer = new BSTVisualizer(getActivity()); appBarLayout.addView(visualizer); diff --git a/app/src/main/java/com/naman14/algovisualizer/algorithm/Algorithm.java b/app/src/main/java/com/naman14/algovisualizer/algorithm/Algorithm.java index 464fceb..0415352 100644 --- a/app/src/main/java/com/naman14/algovisualizer/algorithm/Algorithm.java +++ b/app/src/main/java/com/naman14/algovisualizer/algorithm/Algorithm.java @@ -30,6 +30,7 @@ public class Algorithm extends HandlerThread { public static final String COMMAND_START_ALGORITHM = "start"; public static final String BUBBLE_SORT = "bubble_sort"; public static final String INSERTION_SORT = "insertion_sort"; + public static final String SELECTION_SORT = "selection_sort"; public static final String BINARY_SEARCH = "binary_search"; public static final String BST_INSERT = "bst_insert"; public static final String BST_SEARCH = "bst_search"; diff --git a/app/src/main/java/com/naman14/algovisualizer/algorithm/sorting/SelectionSort.java b/app/src/main/java/com/naman14/algovisualizer/algorithm/sorting/SelectionSort.java new file mode 100644 index 0000000..e3479ed --- /dev/null +++ b/app/src/main/java/com/naman14/algovisualizer/algorithm/sorting/SelectionSort.java @@ -0,0 +1,63 @@ +package com.naman14.algovisualizer.algorithm.sorting; + +import android.app.Activity; + +import com.naman14.algovisualizer.LogFragment; +import com.naman14.algovisualizer.algorithm.Algorithm; +import com.naman14.algovisualizer.visualizer.SortingVisualizer; + +/** + * Created by amit on 21/11/16. + */ + +public class SelectionSort extends SortAlgorithm { + + int[] array; + + public SelectionSort(SortingVisualizer visualizer, Activity activity, LogFragment logFragment) { + this.visualizer = visualizer; + this.activity = activity; + this.logFragment = logFragment; + } + + @Override + public void run() { + super.run(); + } + + private void sort() { + logArray("Original array - " ,array); + + int n = array.length; + for (int j = 0; j < n-1; j++) { + int min_idx = j; + for (int i = j+1; i < n; i++) + if (array[i] < array[min_idx]) { + highlightSwap(min_idx,i); + min_idx = i; + } + addLog("Swapping " + array[j] + " and " + array[min_idx]); + int temp = array[min_idx]; + array[min_idx] = array[j]; + sleep(); + array[j] = temp; + } + addLog("Array has been sorted"); + completed(); + } + + @Override + public void onDataRecieved(Object data) { + super.onDataRecieved(data); + this.array = (int[]) data; + } + + @Override + public void onMessageReceived(String message) { + super.onMessageReceived(message); + if (message.equals(Algorithm.COMMAND_START_ALGORITHM)) { + startExecution(); + sort(); + } + } +} From 65d207c64fd15fb585abcecd6d5167d0aaee2afd Mon Sep 17 00:00:00 2001 From: naman14 Date: Mon, 21 Nov 2016 14:09:09 +0530 Subject: [PATCH 03/15] improve selection sort code --- .../naman14/algovisualizer/AlgorithmCode.java | 24 +++++++++---------- .../algorithm/sorting/SelectionSort.java | 18 +++++++------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/app/src/main/java/com/naman14/algovisualizer/AlgorithmCode.java b/app/src/main/java/com/naman14/algovisualizer/AlgorithmCode.java index 20ca314..1f5eb27 100644 --- a/app/src/main/java/com/naman14/algovisualizer/AlgorithmCode.java +++ b/app/src/main/java/com/naman14/algovisualizer/AlgorithmCode.java @@ -49,18 +49,18 @@ public class AlgorithmCode { public static final String CODE_SELECTION_SORT = " logArray(\"Original array - \", array);\n" + "\n" + " int n = array.length;\n" + - " for (int j = 0; j < n-1; j++) {\n" + - " int min_idx = j;\n" + - " for(int i=j+1;i Date: Mon, 21 Nov 2016 16:40:09 +0800 Subject: [PATCH 04/15] CodeView handles horizontal move --- .../naman14/algovisualizer/CodeFragment.java | 42 +++++++++++++++---- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/naman14/algovisualizer/CodeFragment.java b/app/src/main/java/com/naman14/algovisualizer/CodeFragment.java index a9837ae..90f0f60 100644 --- a/app/src/main/java/com/naman14/algovisualizer/CodeFragment.java +++ b/app/src/main/java/com/naman14/algovisualizer/CodeFragment.java @@ -110,18 +110,44 @@ private void addCodeItem(String code, String title) { codeView.setTheme(CodeViewTheme.GITHUB); codeView.setHorizontalScrollBarEnabled(true); - //Temp solution, block parent touch evenets - codeView.setOnTouchListener(new View.OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - v.getParent().requestDisallowInterceptTouchEvent(true); - return false; - } - }); + codeView.setOnTouchListener(new HorizontalMoveListener()); codeView.showCode(code); codeLayout.addView(codeitem); } + + /** + * handle horizontal move + */ + class HorizontalMoveListener implements View.OnTouchListener { + + float downX = 0; + float downY = 0; + + @Override + public boolean onTouch(View v, MotionEvent event) { + int action = event.getAction(); + switch (action){ + case MotionEvent.ACTION_DOWN: + downX = event.getX(); + downY = event.getY(); + break; + case MotionEvent.ACTION_MOVE: + float dx = Math.abs(event.getX() - downX); + float dy = Math.abs(event.getY() - downY); + + if(dx > dy){ + v.getParent().requestDisallowInterceptTouchEvent(true); + } + + downX = event.getX(); + downY = event.getY(); + + break; + } + return false; + } + } } From 6d339589d5e25fa7c05988a2158423cafa6b4703 Mon Sep 17 00:00:00 2001 From: Naman Dwivedi Date: Mon, 21 Nov 2016 14:11:41 +0530 Subject: [PATCH 05/15] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index cb645fd..7798c7b 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,7 @@ Dijkstara | BellmanFord | WeightedGraphVisualizer Bubble Sort | BubbleSort | SortingVisualizer Insertion Sort | InsertionSort | SortingVisualizer +Selection Sort | SelectionSort | SortingVisualizer All algorithm implementations must extend [Algorithm](https://github.com/naman14/AlgorithmVisualizer-Android/blob/master/app/src/main/java/com/naman14/algovisualizer/algorithm/Algorithm.java) and implement the [DataHandler](https://github.com/naman14/AlgorithmVisualizer-Android/blob/master/app/src/main/java/com/naman14/algovisualizer/algorithm/DataHandler.java) interface. The visualization happens on the main thread while the algorithms run in a seperate thread to be able to pause/resume execution. All data transfer must take place through the DataHandler interface. From 66d420b9dc8433a1eadbae0e237c22acf15dd04a Mon Sep 17 00:00:00 2001 From: Mayank Saxena Date: Sun, 27 Nov 2016 20:42:50 +0530 Subject: [PATCH 06/15] Feature: Added linear search --- app/src/main/assets/desc.json | 13 +++ .../naman14/algovisualizer/AlgorithmCode.java | 14 +++ .../naman14/algovisualizer/CodeFragment.java | 3 + .../naman14/algovisualizer/MainActivity.java | 4 + .../algovisualizer/VisualAlgoFragment.java | 7 ++ .../algovisualizer/algorithm/Algorithm.java | 1 + .../algorithm/search/LinearSearch.java | 109 ++++++++++++++++++ 7 files changed, 151 insertions(+) create mode 100644 app/src/main/java/com/naman14/algovisualizer/algorithm/search/LinearSearch.java diff --git a/app/src/main/assets/desc.json b/app/src/main/assets/desc.json index 0df944f..72e152b 100644 --- a/app/src/main/assets/desc.json +++ b/app/src/main/assets/desc.json @@ -15,6 +15,19 @@ "BinarySearchVisualizer" ] }, + "linear_search": { + "Linear Search": "Linear search or sequential search is a method for finding a target value within a list. It sequentially checks each element of the list for the target value until a match is found or until all the elements have been searched.", + "Applications": [ + "Finding values in an unordered list" + ], + "Complexity": { + "Time": "worst O(N), best O(1), average O(N)", + "Space": "worst O(1) - iterative" + }, + "References": [ + "Wikipedia
" + ] + }, "bst_search": { "Binary Search Tree": "Binary search trees (BST), sometimes called ordered or sorted binary trees, are a particular type of containers: data structures that store \"items\" (such as numbers, names etc.) in memory. They allow fast lookup, addition and removal of items, and can be used to implement either dynamic sets of items, or lookup tables that allow finding an item by its key (e.g., finding the phone number of a person by name).", "Applications": [ diff --git a/app/src/main/java/com/naman14/algovisualizer/AlgorithmCode.java b/app/src/main/java/com/naman14/algovisualizer/AlgorithmCode.java index 1f5eb27..a810f86 100644 --- a/app/src/main/java/com/naman14/algovisualizer/AlgorithmCode.java +++ b/app/src/main/java/com/naman14/algovisualizer/AlgorithmCode.java @@ -144,6 +144,20 @@ public class AlgorithmCode { " }\n" + " completed();"; + public static final String CODE_LINEAR_SEARCH = " logArray(\"Original array - \", array);\n" + + " addLog(\"Value to be searched - \", value);\n" + + " int n = array.length;\n" + + " int position = -1 ;\n" + + " for (int j = 0; j < n-1; j) {\n" + + " if (array[j] == value) \n" + + " pos = j ; \n" + + " break ; \n" + + " }\n" + + " if (pos == -1) \n" + + " addLog(\"Value not found in array\");\n" + + " else \n" + + " addLog(\"Value found in array at position - \", position);\n" ; + public static final String CODE_LINKED_LIST_INSERT = " Node nd = new Node();\n" + " nd.setValue(element);\n" + " addLog(\"Adding: \" + element + \" to the list\");\n" + diff --git a/app/src/main/java/com/naman14/algovisualizer/CodeFragment.java b/app/src/main/java/com/naman14/algovisualizer/CodeFragment.java index a13c79e..bc3eb40 100644 --- a/app/src/main/java/com/naman14/algovisualizer/CodeFragment.java +++ b/app/src/main/java/com/naman14/algovisualizer/CodeFragment.java @@ -70,6 +70,9 @@ public void setCode(String key) { case Algorithm.BST_SEARCH: addCodeItem(AlgorithmCode.CODE_BST_SEARCH, "BST Search"); break; + case Algorithm.LINEAR_SEARCH: + addCodeItem(AlgorithmCode.CODE_LINEAR_SEARCH, "Linear Search"); + break; case Algorithm.BST_INSERT: addCodeItem(AlgorithmCode.CODE_BST_INSERT, "BST Insert"); break; diff --git a/app/src/main/java/com/naman14/algovisualizer/MainActivity.java b/app/src/main/java/com/naman14/algovisualizer/MainActivity.java index 1573af4..391868c 100644 --- a/app/src/main/java/com/naman14/algovisualizer/MainActivity.java +++ b/app/src/main/java/com/naman14/algovisualizer/MainActivity.java @@ -78,6 +78,9 @@ public boolean onChildClick(ExpandableListView expandableListView, View view, in case 0: algoFragment.setupFragment(Algorithm.BINARY_SEARCH); break; + case 1: + algoFragment.setupFragment(Algorithm.LINEAR_SEARCH); + break; } break; case 1: @@ -199,6 +202,7 @@ private void prepareListData() { List heading1 = new ArrayList<>(); heading1.add("Binary search"); + heading1.add("Linear Search"); List heading2 = new ArrayList(); heading2.add("Bubble Sort"); diff --git a/app/src/main/java/com/naman14/algovisualizer/VisualAlgoFragment.java b/app/src/main/java/com/naman14/algovisualizer/VisualAlgoFragment.java index 17f9ff7..8ce7a18 100644 --- a/app/src/main/java/com/naman14/algovisualizer/VisualAlgoFragment.java +++ b/app/src/main/java/com/naman14/algovisualizer/VisualAlgoFragment.java @@ -38,6 +38,7 @@ import com.naman14.algovisualizer.algorithm.list.LinkedList; import com.naman14.algovisualizer.algorithm.list.Stack; import com.naman14.algovisualizer.algorithm.search.BinarySearch; +import com.naman14.algovisualizer.algorithm.search.LinearSearch; import com.naman14.algovisualizer.algorithm.sorting.BubbleSort; import com.naman14.algovisualizer.algorithm.sorting.InsertionSort; import com.naman14.algovisualizer.algorithm.sorting.SelectionSort; @@ -165,6 +166,12 @@ public void setupFragment(String algorithmKey) { algorithm = new BinarySearch((BinarySearchVisualizer) visualizer, getActivity(), logFragment); ((BinarySearch) algorithm).setData(DataUtils.createSortedArray(15)); break; + case Algorithm.LINEAR_SEARCH: + visualizer = new BinarySearchVisualizer(getActivity()); + appBarLayout.addView(visualizer); + algorithm = new LinearSearch((BinarySearchVisualizer) visualizer, getActivity(), logFragment); + ((LinearSearch) algorithm).setData(DataUtils.createSortedArray(15)); + break; case Algorithm.BUBBLE_SORT: visualizer = new SortingVisualizer(getActivity()); appBarLayout.addView(visualizer); diff --git a/app/src/main/java/com/naman14/algovisualizer/algorithm/Algorithm.java b/app/src/main/java/com/naman14/algovisualizer/algorithm/Algorithm.java index 0415352..349452a 100644 --- a/app/src/main/java/com/naman14/algovisualizer/algorithm/Algorithm.java +++ b/app/src/main/java/com/naman14/algovisualizer/algorithm/Algorithm.java @@ -32,6 +32,7 @@ public class Algorithm extends HandlerThread { public static final String INSERTION_SORT = "insertion_sort"; public static final String SELECTION_SORT = "selection_sort"; public static final String BINARY_SEARCH = "binary_search"; + public static final String LINEAR_SEARCH = "linear_search"; public static final String BST_INSERT = "bst_insert"; public static final String BST_SEARCH = "bst_search"; public static final String LINKED_LIST = "linked_list"; diff --git a/app/src/main/java/com/naman14/algovisualizer/algorithm/search/LinearSearch.java b/app/src/main/java/com/naman14/algovisualizer/algorithm/search/LinearSearch.java new file mode 100644 index 0000000..ae57de8 --- /dev/null +++ b/app/src/main/java/com/naman14/algovisualizer/algorithm/search/LinearSearch.java @@ -0,0 +1,109 @@ +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 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 - 1; + + for (int i = 0 ; i Date: Sun, 27 Nov 2016 22:46:42 +0530 Subject: [PATCH 07/15] improved visualization --- .../naman14/algovisualizer/VisualAlgoFragment.java | 2 +- .../algorithm/search/LinearSearch.java | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/naman14/algovisualizer/VisualAlgoFragment.java b/app/src/main/java/com/naman14/algovisualizer/VisualAlgoFragment.java index 8ce7a18..7e00e2c 100644 --- a/app/src/main/java/com/naman14/algovisualizer/VisualAlgoFragment.java +++ b/app/src/main/java/com/naman14/algovisualizer/VisualAlgoFragment.java @@ -170,7 +170,7 @@ public void setupFragment(String algorithmKey) { visualizer = new BinarySearchVisualizer(getActivity()); appBarLayout.addView(visualizer); algorithm = new LinearSearch((BinarySearchVisualizer) visualizer, getActivity(), logFragment); - ((LinearSearch) algorithm).setData(DataUtils.createSortedArray(15)); + ((LinearSearch) algorithm).setData(DataUtils.createRandomArray(15)); break; case Algorithm.BUBBLE_SORT: visualizer = new SortingVisualizer(getActivity()); diff --git a/app/src/main/java/com/naman14/algovisualizer/algorithm/search/LinearSearch.java b/app/src/main/java/com/naman14/algovisualizer/algorithm/search/LinearSearch.java index ae57de8..6ced994 100644 --- a/app/src/main/java/com/naman14/algovisualizer/algorithm/search/LinearSearch.java +++ b/app/src/main/java/com/naman14/algovisualizer/algorithm/search/LinearSearch.java @@ -46,19 +46,19 @@ private void search() { int rnd = new Random().nextInt(array.length); int data = array[rnd]; - addLog("Searching for " + data); + addLog("Searching for - " + data); - int n = array.length - 1; + int n = array.length ; for (int i = 0 ; i Date: Sun, 4 Dec 2016 15:45:11 +0530 Subject: [PATCH 08/15] Feature: Added quicksort --- app/src/main/assets/desc.json | 10 ++ .../naman14/algovisualizer/AlgorithmCode.java | 27 ++++++ .../naman14/algovisualizer/CodeFragment.java | 3 + .../naman14/algovisualizer/MainActivity.java | 5 + .../algovisualizer/VisualAlgoFragment.java | 7 ++ .../algovisualizer/algorithm/Algorithm.java | 1 + .../algorithm/sorting/QuickSort.java | 91 +++++++++++++++++++ 7 files changed, 144 insertions(+) create mode 100644 app/src/main/java/com/naman14/algovisualizer/algorithm/sorting/QuickSort.java diff --git a/app/src/main/assets/desc.json b/app/src/main/assets/desc.json index 72e152b..beac5d2 100644 --- a/app/src/main/assets/desc.json +++ b/app/src/main/assets/desc.json @@ -94,6 +94,16 @@ "SortingVisualizer" ] }, + "quicksort": { + "Quicksort": "Quicksort (sometimes called partition-exchange sort) is an efficient sorting algorithm, serving as a systematic method for placing the elements of an array in order.", + "Complexity": { + "Time": "worst O(n^2), best O(nlogn), average O(nlogn)", + "Space": "worst O(logn)" + }, + "References": [ + "Quicksort
" + ] + }, "linked_list": { "Singly linked list": "A Linked List is a linear collection of data elements, called nodes, each pointing to the next node by means of a pointer. It is a data structure consisting of a group of nodes which together represent a sequence. Under the simplest form, each node is composed of data and a reference (in other words, a link) to the next node in the sequence. ", "Complexity": { diff --git a/app/src/main/java/com/naman14/algovisualizer/AlgorithmCode.java b/app/src/main/java/com/naman14/algovisualizer/AlgorithmCode.java index a810f86..7ca22c3 100644 --- a/app/src/main/java/com/naman14/algovisualizer/AlgorithmCode.java +++ b/app/src/main/java/com/naman14/algovisualizer/AlgorithmCode.java @@ -65,6 +65,33 @@ public class AlgorithmCode { " addLog(\"Array has been sorted\");\n" + " completed();"; + public static final String CODE_QUICKSORT = "int partition (int arr[], int low, int high)\n" + + "{\n" + + " int pivot = arr[high]; \n" + + " int i = (low - 1); \n" + + " \n" + + " for (int j = low; j <= high- 1; j++)\n" + + " {\n" + + " if (arr[j] <= pivot)\n" + + " {\n" + + " i++; \n" + + " swap(&arr[i], &arr[j]);\n" + + " }\n" + + " }\n" + + " swap(&arr[i + 1], &arr[high]);\n" + + " return (i + 1);\n" + + "}\n" + + "void quickSort(int arr[], int low, int high)\n" + + "{\n" + + " if (low < high)\n" + + " {\n" + + " int pi = partition(arr, low, high);\n" + + " \n" + + " quickSort(arr, low, pi - 1);\n" + + " quickSort(arr, pi + 1, high);\n" + + " }\n" + + "}"; + public static final String CODE_BST_SEARCH = " int id = DataUtils.getRandomKeyFromBST();\n" + " addLog(\"Searching for \" + String.valueOf(id));\n" + " BinarySearchTree.Node current = b.getRoot();\n" + diff --git a/app/src/main/java/com/naman14/algovisualizer/CodeFragment.java b/app/src/main/java/com/naman14/algovisualizer/CodeFragment.java index bc3eb40..4c5b2e2 100644 --- a/app/src/main/java/com/naman14/algovisualizer/CodeFragment.java +++ b/app/src/main/java/com/naman14/algovisualizer/CodeFragment.java @@ -67,6 +67,9 @@ public void setCode(String key) { case Algorithm.SELECTION_SORT: addCodeItem(AlgorithmCode.CODE_SELECTION_SORT,"Selection sort"); break; + case Algorithm.QUICKSORT: + addCodeItem(AlgorithmCode.CODE_QUICKSORT, "Quicksort"); + break; case Algorithm.BST_SEARCH: addCodeItem(AlgorithmCode.CODE_BST_SEARCH, "BST Search"); break; diff --git a/app/src/main/java/com/naman14/algovisualizer/MainActivity.java b/app/src/main/java/com/naman14/algovisualizer/MainActivity.java index 391868c..ac4a194 100644 --- a/app/src/main/java/com/naman14/algovisualizer/MainActivity.java +++ b/app/src/main/java/com/naman14/algovisualizer/MainActivity.java @@ -93,6 +93,10 @@ public boolean onChildClick(ExpandableListView expandableListView, View view, in break; case 2: algoFragment.setupFragment(Algorithm.SELECTION_SORT); + break; + case 3: + algoFragment.setupFragment(Algorithm.QUICKSORT); + break; } break; case 2: @@ -208,6 +212,7 @@ private void prepareListData() { heading2.add("Bubble Sort"); heading2.add("Insertion Sort"); heading2.add("Selection Sort"); + heading2.add("Quicksort"); List heading3 = new ArrayList(); heading3.add("BST Search"); heading3.add("BST Insert"); diff --git a/app/src/main/java/com/naman14/algovisualizer/VisualAlgoFragment.java b/app/src/main/java/com/naman14/algovisualizer/VisualAlgoFragment.java index 7e00e2c..1bb33cf 100644 --- a/app/src/main/java/com/naman14/algovisualizer/VisualAlgoFragment.java +++ b/app/src/main/java/com/naman14/algovisualizer/VisualAlgoFragment.java @@ -41,6 +41,7 @@ import com.naman14.algovisualizer.algorithm.search.LinearSearch; import com.naman14.algovisualizer.algorithm.sorting.BubbleSort; import com.naman14.algovisualizer.algorithm.sorting.InsertionSort; +import com.naman14.algovisualizer.algorithm.sorting.QuickSort; import com.naman14.algovisualizer.algorithm.sorting.SelectionSort; import com.naman14.algovisualizer.algorithm.tree.bst.BSTAlgorithm; import com.naman14.algovisualizer.visualizer.AlgorithmVisualizer; @@ -190,6 +191,12 @@ public void setupFragment(String algorithmKey) { algorithm = new SelectionSort((SortingVisualizer) visualizer, getActivity(), logFragment); ((SelectionSort) algorithm).setData(DataUtils.createRandomArray(15)); break; + case Algorithm.QUICKSORT: + visualizer = new SortingVisualizer(getActivity()); + appBarLayout.addView(visualizer); + algorithm = new QuickSort((SortingVisualizer) visualizer, getActivity(), logFragment); + ((QuickSort) algorithm).setData(DataUtils.createRandomArray(15)); + break; case Algorithm.BST_SEARCH: visualizer = new BSTVisualizer(getActivity()); appBarLayout.addView(visualizer); diff --git a/app/src/main/java/com/naman14/algovisualizer/algorithm/Algorithm.java b/app/src/main/java/com/naman14/algovisualizer/algorithm/Algorithm.java index 349452a..8935ab2 100644 --- a/app/src/main/java/com/naman14/algovisualizer/algorithm/Algorithm.java +++ b/app/src/main/java/com/naman14/algovisualizer/algorithm/Algorithm.java @@ -31,6 +31,7 @@ public class Algorithm extends HandlerThread { public static final String BUBBLE_SORT = "bubble_sort"; public static final String INSERTION_SORT = "insertion_sort"; public static final String SELECTION_SORT = "selection_sort"; + public static final String QUICKSORT = "quicksort"; public static final String BINARY_SEARCH = "binary_search"; public static final String LINEAR_SEARCH = "linear_search"; public static final String BST_INSERT = "bst_insert"; diff --git a/app/src/main/java/com/naman14/algovisualizer/algorithm/sorting/QuickSort.java b/app/src/main/java/com/naman14/algovisualizer/algorithm/sorting/QuickSort.java new file mode 100644 index 0000000..426e133 --- /dev/null +++ b/app/src/main/java/com/naman14/algovisualizer/algorithm/sorting/QuickSort.java @@ -0,0 +1,91 @@ +package com.naman14.algovisualizer.algorithm.sorting; + +import android.app.Activity; + +import com.naman14.algovisualizer.LogFragment; +import com.naman14.algovisualizer.algorithm.Algorithm; +import com.naman14.algovisualizer.visualizer.SortingVisualizer; + +/** + * Created by mayank on 2/12/16. + */ + +public class QuickSort extends SortAlgorithm { + + private int[] array; + + public QuickSort(SortingVisualizer visualizer, Activity activity, LogFragment logFragment) { + this.visualizer = visualizer; + this.activity = activity; + this.logFragment = logFragment; + } + + @Override + public void run() { + super.run(); + } + + private void sort() { + logArray("Original array - ", array); + if (array == null || array.length == 0) { + return; + } + int length = array.length; + quickSort(0, length - 1); + addLog("Array has been sorted"); + completed(); + } + + private void quickSort(int lowerIndex, int higherIndex) { + + sleepFor(1000); + int i = lowerIndex; + int j = higherIndex; + int pivot = array[lowerIndex + (higherIndex - lowerIndex) / 2]; + highlightTrace(pivot); + addLog("Pivot element is " + pivot); + + while (i <= j) { + while (array[i] < pivot) { + i++; + } + while (array[j] > pivot) { + j--; + } + if (i <= j) { + swap(i, j); + highlightSwap(i, j); + addLog("Swapping " + array[i] + " and " + array[j]); + //move index to next position on both sides + i++; + j--; + } + } + if (lowerIndex < j) + quickSort(lowerIndex, j); + if (i < higherIndex) + quickSort(i, higherIndex); + } + + private void swap(int i, int j) { + int temp = array[i]; + array[i] = array[j]; + array[j] = temp; + } + + @Override + public void onDataRecieved(Object data) { + super.onDataRecieved(data); + this.array = (int[]) data; + } + + @Override + public void onMessageReceived(String message) { + super.onMessageReceived(message); + if (message.equals(Algorithm.COMMAND_START_ALGORITHM)) { + startExecution(); + sort(); + } + } + +} From 3c8e2127660aac105b7c666ede4b30685099a0e9 Mon Sep 17 00:00:00 2001 From: naman14 Date: Tue, 6 Dec 2016 22:52:20 +0530 Subject: [PATCH 09/15] fix linear search visualizer, use array according to visualizer --- app/src/main/java/com/naman14/algovisualizer/DataUtils.java | 5 +++-- .../java/com/naman14/algovisualizer/VisualAlgoFragment.java | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/naman14/algovisualizer/DataUtils.java b/app/src/main/java/com/naman14/algovisualizer/DataUtils.java index 1f48f99..e39884f 100644 --- a/app/src/main/java/com/naman14/algovisualizer/DataUtils.java +++ b/app/src/main/java/com/naman14/algovisualizer/DataUtils.java @@ -198,12 +198,13 @@ public static WeightedGraph2 createWeightedGraph2(int size) { } - public static int[] createSortedArray(int size) { + public static int[] createArray(int size, boolean sorted) { int[] integers = new int[size]; for (int i = 0; i < size; i++) { integers[i] = new Random().nextInt(88) + 10; } - Arrays.sort(integers); + if (sorted) + Arrays.sort(integers); return integers; } diff --git a/app/src/main/java/com/naman14/algovisualizer/VisualAlgoFragment.java b/app/src/main/java/com/naman14/algovisualizer/VisualAlgoFragment.java index 7e00e2c..d6756d0 100644 --- a/app/src/main/java/com/naman14/algovisualizer/VisualAlgoFragment.java +++ b/app/src/main/java/com/naman14/algovisualizer/VisualAlgoFragment.java @@ -164,13 +164,13 @@ public void setupFragment(String algorithmKey) { visualizer = new BinarySearchVisualizer(getActivity()); appBarLayout.addView(visualizer); algorithm = new BinarySearch((BinarySearchVisualizer) visualizer, getActivity(), logFragment); - ((BinarySearch) algorithm).setData(DataUtils.createSortedArray(15)); + ((BinarySearch) algorithm).setData(DataUtils.createArray(15, true)); break; case Algorithm.LINEAR_SEARCH: visualizer = new BinarySearchVisualizer(getActivity()); appBarLayout.addView(visualizer); algorithm = new LinearSearch((BinarySearchVisualizer) visualizer, getActivity(), logFragment); - ((LinearSearch) algorithm).setData(DataUtils.createRandomArray(15)); + ((LinearSearch) algorithm).setData(DataUtils.createArray(15, false)); break; case Algorithm.BUBBLE_SORT: visualizer = new SortingVisualizer(getActivity()); From de71b87003e2111b6903c6f3855bbb34b0624684 Mon Sep 17 00:00:00 2001 From: Naman Dwivedi Date: Tue, 12 Sep 2017 21:59:44 +0530 Subject: [PATCH 10/15] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7798c7b..1af00ce 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Algorithm Visualizer for Android -##Visualizations +## Visualizations The following visualizations are available currently - @@ -22,7 +22,7 @@ The following visualizations are available currently - * BFS and DFS traversal * Dijkstara and Bellman Ford graph search -##Contributing +## Contributing Contributions are welcome to be able to provide visualizations for more algorithms. The existing API for visualizers are given below. These existing visualizers can be used directly for most algorithms. From 177336c057cc41828d9ee3769334d5b79d807bac Mon Sep 17 00:00:00 2001 From: Naman Dwivedi Date: Tue, 12 Sep 2017 22:36:14 +0530 Subject: [PATCH 11/15] update build tools --- .gitignore | 2 ++ .idea/misc.xml | 15 +-------------- .idea/modules.xml | 1 + app/build.gradle | 10 +++++----- build.gradle | 4 +++- gradle/wrapper/gradle-wrapper.properties | 2 +- 6 files changed, 13 insertions(+), 21 deletions(-) diff --git a/.gitignore b/.gitignore index 8e1707a..934e580 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ .gradle /local.properties .idea +.idea/misc.xml +.idea/modules.xml .DS_Store /build /captures diff --git a/.idea/misc.xml b/.idea/misc.xml index 62fabb1..19b901b 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,8 +1,5 @@ - - - - - - - - - - - - - - + diff --git a/.idea/modules.xml b/.idea/modules.xml index d37994c..7424f4f 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -4,6 +4,7 @@ + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 604b5f6..a690c7f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,13 +2,13 @@ apply plugin: 'com.android.application' apply plugin: 'io.fabric' android { - compileSdkVersion 24 - buildToolsVersion "24.0.3" + compileSdkVersion 25 + buildToolsVersion "25.0.2" defaultConfig { applicationId "com.naman14.algovisualizer" minSdkVersion 16 - targetSdkVersion 24 + targetSdkVersion 25 versionCode 3 versionName "1.0" } @@ -33,8 +33,8 @@ repositories { dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) - compile 'com.android.support:appcompat-v7:24.2.1' - compile 'com.android.support:design:24.2.1' + compile 'com.android.support:appcompat-v7:25.4.0' + compile 'com.android.support:design:25.4.0' compile 'com.roughike:bottom-bar:1.3.4' compile 'thereisnospon.codeview:codeview:0.3.1' compile 'com.anjlab.android.iab.v3:library:1.0.+' diff --git a/build.gradle b/build.gradle index e5fbd9f..7a073cb 100644 --- a/build.gradle +++ b/build.gradle @@ -3,10 +3,11 @@ buildscript { repositories { jcenter() + maven { url 'https://maven.google.com' } maven { url 'https://maven.fabric.io/public' } } dependencies { - classpath 'com.android.tools.build:gradle:2.1.0' + classpath 'com.android.tools.build:gradle:3.0.0-alpha6' classpath 'io.fabric.tools:gradle:1.+' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files @@ -16,6 +17,7 @@ buildscript { allprojects { repositories { jcenter() + maven { url 'https://maven.google.com' } } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index c25cec5..25b7da7 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-milestone-1-all.zip From 1fb793eca7e7f72a0e0e03118997ee421d69ed1c Mon Sep 17 00:00:00 2001 From: Naman Dwivedi Date: Wed, 13 Sep 2017 01:35:25 +0530 Subject: [PATCH 12/15] add interval as preference --- .idea/modules.xml | 1 - app/src/main/AndroidManifest.xml | 1 + .../naman14/algovisualizer/MainActivity.java | 4 ++ .../algovisualizer/SettingsActivity.java | 30 +++++++++++++ .../algovisualizer/SettingsFragment.java | 44 +++++++++++++++++++ .../algovisualizer/VisualAlgoFragment.java | 4 ++ .../algovisualizer/algorithm/Algorithm.java | 12 ++++- app/src/main/res/layout/activity_settings.xml | 11 +++++ app/src/main/res/xml/preferences.xml | 10 +++++ 9 files changed, 114 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/com/naman14/algovisualizer/SettingsActivity.java create mode 100644 app/src/main/java/com/naman14/algovisualizer/SettingsFragment.java create mode 100644 app/src/main/res/layout/activity_settings.xml create mode 100644 app/src/main/res/xml/preferences.xml diff --git a/.idea/modules.xml b/.idea/modules.xml index 7424f4f..d37994c 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -4,7 +4,6 @@ - \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ec62b26..6914d91 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -23,6 +23,7 @@ + heading10 = new ArrayList(); heading10.add("About"); heading10.add("Fork on Github"); + heading10.add("Settings"); try { if (BillingProcessor.isIabServiceAvailable(this)) { diff --git a/app/src/main/java/com/naman14/algovisualizer/SettingsActivity.java b/app/src/main/java/com/naman14/algovisualizer/SettingsActivity.java new file mode 100644 index 0000000..f5be681 --- /dev/null +++ b/app/src/main/java/com/naman14/algovisualizer/SettingsActivity.java @@ -0,0 +1,30 @@ +package com.naman14.algovisualizer; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v7.app.AppCompatActivity; +import android.view.MenuItem; + +/** + * Created by naman on 13/9/17. + */ + +public class SettingsActivity extends AppCompatActivity { + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_settings); + + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + getSupportActionBar().setTitle("Settings"); + getFragmentManager().beginTransaction().replace(R.id.fragment_container, new SettingsFragment()).commit(); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == android.R.id.home) + super.onBackPressed(); + return super.onOptionsItemSelected(item); + } +} diff --git a/app/src/main/java/com/naman14/algovisualizer/SettingsFragment.java b/app/src/main/java/com/naman14/algovisualizer/SettingsFragment.java new file mode 100644 index 0000000..d6c323a --- /dev/null +++ b/app/src/main/java/com/naman14/algovisualizer/SettingsFragment.java @@ -0,0 +1,44 @@ +package com.naman14.algovisualizer; + +import android.content.SharedPreferences; +import android.os.Bundle; +import android.preference.EditTextPreference; +import android.preference.Preference; +import android.preference.PreferenceFragment; +import android.preference.PreferenceManager; +import android.support.annotation.Nullable; + +import com.naman14.algovisualizer.algorithm.Algorithm; + +/** + * Created by naman on 13/9/17. + */ + +public class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener { + + public static final String KEY_INTERVAL = "preference_interval"; + + SharedPreferences preferences; + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + addPreferencesFromResource(R.xml.preferences); + + preferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); + preferences.registerOnSharedPreferenceChangeListener(this); + findPreference(KEY_INTERVAL).setSummary(preferences.getString(KEY_INTERVAL, "500")); + + } + + @Override + public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { + Preference p = findPreference(key); + if (p instanceof EditTextPreference) { + EditTextPreference editTextPref = (EditTextPreference) p; + p.setSummary(editTextPref.getText()); + Algorithm.setInterval(Integer.parseInt(editTextPref.getText())); + } + } +} diff --git a/app/src/main/java/com/naman14/algovisualizer/VisualAlgoFragment.java b/app/src/main/java/com/naman14/algovisualizer/VisualAlgoFragment.java index adf16e4..b8d0e21 100644 --- a/app/src/main/java/com/naman14/algovisualizer/VisualAlgoFragment.java +++ b/app/src/main/java/com/naman14/algovisualizer/VisualAlgoFragment.java @@ -15,6 +15,7 @@ package com.naman14.algovisualizer; import android.os.Bundle; +import android.preference.PreferenceManager; import android.support.annotation.Nullable; import android.support.design.widget.AppBarLayout; import android.support.design.widget.CoordinatorLayout; @@ -126,6 +127,7 @@ public void onTabReSelected(int position) { algoFragment = AlgoDescriptionFragment.newInstance(getArguments().getString(Algorithm.KEY_ALGORITHM)); setupFragment(getArguments().getString(Algorithm.KEY_ALGORITHM)); + return rootView; } @@ -254,6 +256,8 @@ public void setupFragment(String algorithmKey) { visualizer = null; } + Algorithm.setInterval(Integer.parseInt(PreferenceManager.getDefaultSharedPreferences(getActivity()) + .getString(SettingsFragment.KEY_INTERVAL, "500"))); algorithm.setStarted(false); fab.setImageResource(R.drawable.ic_play_arrow_white_24dp); logFragment.clearLog(); diff --git a/app/src/main/java/com/naman14/algovisualizer/algorithm/Algorithm.java b/app/src/main/java/com/naman14/algovisualizer/algorithm/Algorithm.java index 8935ab2..ce7332b 100644 --- a/app/src/main/java/com/naman14/algovisualizer/algorithm/Algorithm.java +++ b/app/src/main/java/com/naman14/algovisualizer/algorithm/Algorithm.java @@ -18,9 +18,11 @@ import android.os.Handler; import android.os.HandlerThread; import android.os.Message; +import android.preference.PreferenceManager; import com.naman14.algovisualizer.AlgoCompletionListener; import com.naman14.algovisualizer.LogFragment; +import com.naman14.algovisualizer.SettingsFragment; import java.util.concurrent.atomic.AtomicBoolean; @@ -44,7 +46,6 @@ public class Algorithm extends HandlerThread { public static final String DIJKSTRA = "dijkstra"; public static final String BELLMAN_FORD = "bellman_ford"; - public LogFragment logFragment; public Activity activity; public AlgoCompletionListener completionListener; @@ -56,12 +57,14 @@ public class Algorithm extends HandlerThread { private Handler workerHandler; + private static int INTERVAL = 500; + public Algorithm() { super(""); } public void sleep() { - sleepFor(500); + sleepFor(INTERVAL); } public void sleepFor(long time) { @@ -193,4 +196,9 @@ public void run() { }); } } + + public static void setInterval(int interval) { + INTERVAL = interval; + } + } diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml new file mode 100644 index 0000000..0cef547 --- /dev/null +++ b/app/src/main/res/layout/activity_settings.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml new file mode 100644 index 0000000..a7c4b65 --- /dev/null +++ b/app/src/main/res/xml/preferences.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file From 2983448fe6eb4a21e7c05896568053771b10d766 Mon Sep 17 00:00:00 2001 From: Naman Dwivedi Date: Wed, 13 Sep 2017 02:10:55 +0530 Subject: [PATCH 13/15] base n queen problem data --- .../com/naman14/algovisualizer/DataUtils.java | 6 +++ .../naman14/algovisualizer/MainActivity.java | 17 +++++++- .../algovisualizer/VisualAlgoFragment.java | 3 ++ .../algovisualizer/algorithm/Algorithm.java | 1 + .../visualizer/Array2DVisualizer.java | 43 +++++++++++++++++++ 5 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/naman14/algovisualizer/visualizer/Array2DVisualizer.java diff --git a/app/src/main/java/com/naman14/algovisualizer/DataUtils.java b/app/src/main/java/com/naman14/algovisualizer/DataUtils.java index e39884f..c6141d2 100644 --- a/app/src/main/java/com/naman14/algovisualizer/DataUtils.java +++ b/app/src/main/java/com/naman14/algovisualizer/DataUtils.java @@ -208,6 +208,12 @@ public static int[] createArray(int size, boolean sorted) { return integers; } + public static int[][] createNQueenArray(int n) { + //all values will be initialised to zero + return new int[n][n]; + + } + public static int getRandomKeyFromBST() { int rnd = new Random().nextInt(bst_array.length); return bst_array[rnd]; diff --git a/app/src/main/java/com/naman14/algovisualizer/MainActivity.java b/app/src/main/java/com/naman14/algovisualizer/MainActivity.java index 757b1f3..b269b0b 100644 --- a/app/src/main/java/com/naman14/algovisualizer/MainActivity.java +++ b/app/src/main/java/com/naman14/algovisualizer/MainActivity.java @@ -140,6 +140,13 @@ public boolean onChildClick(ExpandableListView expandableListView, View view, in } break; case 5: + switch (childPosition) { + case 0: + algoFragment.setupFragment(Algorithm.N_QUEENS); + break; + } + break; + case 6: switch (childPosition) { case 0: mDrawerLayout.closeDrawers(); @@ -203,6 +210,10 @@ private void prepareListData() { item5.setName("Graph"); listDataHeader.add(item5); + ExpandedMenuModel item6 = new ExpandedMenuModel(); + item6.setName("Backtracking"); + listDataHeader.add(item6); + ExpandedMenuModel item10 = new ExpandedMenuModel(); item10.setName("About"); listDataHeader.add(item10); @@ -230,6 +241,9 @@ private void prepareListData() { heading5.add("Dijkstra"); heading5.add("Bellman Ford"); + List heading6 = new ArrayList(); + heading6.add("N Queens Problem"); + List heading10 = new ArrayList(); heading10.add("About"); heading10.add("Fork on Github"); @@ -248,7 +262,8 @@ private void prepareListData() { listDataChild.put(listDataHeader.get(2), heading3); listDataChild.put(listDataHeader.get(3), heading4); listDataChild.put(listDataHeader.get(4), heading5); - listDataChild.put(listDataHeader.get(5), heading10); + listDataChild.put(listDataHeader.get(5), heading6); + listDataChild.put(listDataHeader.get(6), heading10); diff --git a/app/src/main/java/com/naman14/algovisualizer/VisualAlgoFragment.java b/app/src/main/java/com/naman14/algovisualizer/VisualAlgoFragment.java index b8d0e21..c4ea7b5 100644 --- a/app/src/main/java/com/naman14/algovisualizer/VisualAlgoFragment.java +++ b/app/src/main/java/com/naman14/algovisualizer/VisualAlgoFragment.java @@ -252,6 +252,9 @@ public void setupFragment(String algorithmKey) { algorithm = new BellmanFordAlgorithm((WeightedGraphVisualizer) visualizer, getActivity(), logFragment); ((BellmanFordAlgorithm) algorithm).setData(DataUtils.createWeightedGraph(5)); break; + case Algorithm.N_QUEENS: + visualizer = null; + break; default: visualizer = null; } diff --git a/app/src/main/java/com/naman14/algovisualizer/algorithm/Algorithm.java b/app/src/main/java/com/naman14/algovisualizer/algorithm/Algorithm.java index ce7332b..cff416d 100644 --- a/app/src/main/java/com/naman14/algovisualizer/algorithm/Algorithm.java +++ b/app/src/main/java/com/naman14/algovisualizer/algorithm/Algorithm.java @@ -45,6 +45,7 @@ public class Algorithm extends HandlerThread { public static final String DFS = "dfs"; public static final String DIJKSTRA = "dijkstra"; public static final String BELLMAN_FORD = "bellman_ford"; + public static final String N_QUEENS = "n_queens"; public LogFragment logFragment; public Activity activity; diff --git a/app/src/main/java/com/naman14/algovisualizer/visualizer/Array2DVisualizer.java b/app/src/main/java/com/naman14/algovisualizer/visualizer/Array2DVisualizer.java new file mode 100644 index 0000000..58d6c40 --- /dev/null +++ b/app/src/main/java/com/naman14/algovisualizer/visualizer/Array2DVisualizer.java @@ -0,0 +1,43 @@ +package com.naman14.algovisualizer.visualizer; + +import android.content.Context; +import android.graphics.Canvas; +import android.util.AttributeSet; + +/** + * Created by naman on 13/9/17. + */ + +public class Array2DVisualizer extends AlgorithmVisualizer { + + private int[][] array; + + public Array2DVisualizer(Context context) { + super(context); + initialise(); + } + + public Array2DVisualizer(Context context, AttributeSet attrs) { + super(context, attrs); + initialise(); + } + + private void initialise() { + + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + } + + public void setData(int[][] data) { + this.array = data; + invalidate(); + } + + @Override + public void onCompleted() { + + } +} From 4f9fa5b4b73abf0ebb58eacdaecfd10c103e8241 Mon Sep 17 00:00:00 2001 From: Naman Dwivedi Date: Tue, 31 Oct 2017 21:10:01 +0530 Subject: [PATCH 14/15] update build tools --- app/build.gradle | 14 +++++++------- build.gradle | 15 ++++++++++++++- gradle/wrapper/gradle-wrapper.properties | 2 +- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index a690c7f..ec6680f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,13 +2,13 @@ apply plugin: 'com.android.application' apply plugin: 'io.fabric' android { - compileSdkVersion 25 - buildToolsVersion "25.0.2" + compileSdkVersion rootProject.compileSdkVersion + buildToolsVersion rootProject.buildToolsVersion defaultConfig { applicationId "com.naman14.algovisualizer" - minSdkVersion 16 - targetSdkVersion 25 + minSdkVersion rootProject.minSdkVersion + targetSdkVersion rootProject.targetSdkVersion versionCode 3 versionName "1.0" } @@ -33,13 +33,13 @@ repositories { dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) - compile 'com.android.support:appcompat-v7:25.4.0' - compile 'com.android.support:design:25.4.0' + compile "com.android.support:appcompat-v7:$rootProject.supportLibraryVersion" + compile "com.android.support:design:$rootProject.supportLibraryVersion" compile 'com.roughike:bottom-bar:1.3.4' compile 'thereisnospon.codeview:codeview:0.3.1' compile 'com.anjlab.android.iab.v3:library:1.0.+' compile('com.crashlytics.sdk.android:crashlytics:2.6.5@aar') { - transitive = true; + transitive = true } diff --git a/build.gradle b/build.gradle index 7a073cb..864ae79 100644 --- a/build.gradle +++ b/build.gradle @@ -3,11 +3,12 @@ buildscript { repositories { jcenter() + google() maven { url 'https://maven.google.com' } maven { url 'https://maven.fabric.io/public' } } dependencies { - classpath 'com.android.tools.build:gradle:3.0.0-alpha6' + classpath 'com.android.tools.build:gradle:3.0.0-beta7' classpath 'io.fabric.tools:gradle:1.+' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files @@ -17,6 +18,7 @@ buildscript { allprojects { repositories { jcenter() + google() maven { url 'https://maven.google.com' } } } @@ -24,3 +26,14 @@ allprojects { task clean(type: Delete) { delete rootProject.buildDir } + +ext { + // Sdk and tools + minSdkVersion = 21 + targetSdkVersion = 26 + compileSdkVersion = 26 + buildToolsVersion = '26.0.2' + + // App dependencies + supportLibraryVersion = '26.1.0' +} diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 25b7da7..cb1528e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-milestone-1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip From 782c7746de8cb4af066675dde3a763dd16d04cdc Mon Sep 17 00:00:00 2001 From: Naman Dwivedi Date: Sat, 27 Jan 2018 19:25:34 +0530 Subject: [PATCH 15/15] update buildtools version --- build.gradle | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 864ae79..04408b5 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ buildscript { maven { url 'https://maven.fabric.io/public' } } dependencies { - classpath 'com.android.tools.build:gradle:3.0.0-beta7' + classpath 'com.android.tools.build:gradle:3.0.1' classpath 'io.fabric.tools:gradle:1.+' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files @@ -32,8 +32,8 @@ ext { minSdkVersion = 21 targetSdkVersion = 26 compileSdkVersion = 26 - buildToolsVersion = '26.0.2' + buildToolsVersion = '27.0.3' // App dependencies - supportLibraryVersion = '26.1.0' + supportLibraryVersion = '27.0.2' }