From ab29ca903d474e24160b7cb669d90d9fe44b11e6 Mon Sep 17 00:00:00 2001 From: "Md Rashidul Hasan (LCL)" Date: Mon, 25 Mar 2019 12:00:02 -0400 Subject: [PATCH 1/5] setup a IntelliJ project --- .idea/compiler.xml | 23 +++++++++++ .idea/description.html | 1 + .idea/encodings.xml | 6 +++ .idea/misc.xml | 9 +++++ .idea/modules.xml | 8 ++++ .idea/vcs.xml | 6 +++ .idea/workspace.xml | 89 ++++++++++++++++++++++++++++++++++++++++++ cs.iml | 12 ++++++ src/Main.java | 6 +++ 9 files changed, 160 insertions(+) create mode 100644 .idea/compiler.xml create mode 100644 .idea/description.html create mode 100644 .idea/encodings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 .idea/workspace.xml create mode 100644 cs.iml create mode 100644 src/Main.java diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..217af47 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,23 @@ + + + + + + diff --git a/.idea/description.html b/.idea/description.html new file mode 100644 index 0000000..db5f129 --- /dev/null +++ b/.idea/description.html @@ -0,0 +1 @@ +Simple Java application that includes a class with main() method \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..ada92a5 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..c9209a5 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..cbfda2d --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..595ecbb --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/cs.iml b/cs.iml new file mode 100644 index 0000000..d5c0743 --- /dev/null +++ b/cs.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/Main.java b/src/Main.java new file mode 100644 index 0000000..a0428da --- /dev/null +++ b/src/Main.java @@ -0,0 +1,6 @@ +public class Main { + + public static void main(String[] args) { + System.out.println("Hello World!"); + } +} From a081a66e897ba8226df40ca28ab203552341f835 Mon Sep 17 00:00:00 2001 From: "nongar09@gmail.com" Date: Wed, 27 Mar 2019 22:00:35 -0400 Subject: [PATCH 2/5] Added quick sort --- src/Main.java | 10 +++++- src/com/cs/algorithms/QuickSort.java | 47 ++++++++++++++++++++++++++++ src/com/cs/utils/Utils.java | 10 ++++++ 3 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 src/com/cs/algorithms/QuickSort.java create mode 100644 src/com/cs/utils/Utils.java diff --git a/src/Main.java b/src/Main.java index a0428da..b373049 100644 --- a/src/Main.java +++ b/src/Main.java @@ -1,6 +1,14 @@ +import com.cs.algorithms.QuickSort; + +import java.util.*; + public class Main { public static void main(String[] args) { - System.out.println("Hello World!"); + + QuickSort quickSort = new QuickSort(); + quickSort.testQuickSort(); } + + } diff --git a/src/com/cs/algorithms/QuickSort.java b/src/com/cs/algorithms/QuickSort.java new file mode 100644 index 0000000..dae61d0 --- /dev/null +++ b/src/com/cs/algorithms/QuickSort.java @@ -0,0 +1,47 @@ +package com.cs.algorithms; + + +import com.cs.utils.Utils; + +public class QuickSort { + + public void testQuickSort() { +// int[] arr = new int[]{3, 4, 1, 6, 92, 10}; + int[] arr = new int[]{1, 2, 3, 3, 4}; + quickSort(arr, 0, arr.length - 1); + Utils.printArray(arr); + } + + void quickSort(int[] nums, int start, int end) { + if (start < end) { + int pivot = partition(nums, start, end); + quickSort(nums, start, pivot - 1); + quickSort(nums, pivot + 1, end); + } + } + + // Partitioning using pivot as the last element + + int partition(int[] nums, int start, int end) { + int pivot = nums[end]; + int i = start - 1; + for (int j = start; j < end; j++) { + if (nums[j] < pivot) { + i++; + swap(nums, i, j); + } + } + swap(nums, i + 1, end); + return end; + } + + void swap(int nums[], int i, int j) { + int num = nums[i]; + nums[i] = nums[j]; + nums[j] = num; + } + + + /**/ +} + diff --git a/src/com/cs/utils/Utils.java b/src/com/cs/utils/Utils.java new file mode 100644 index 0000000..092da1e --- /dev/null +++ b/src/com/cs/utils/Utils.java @@ -0,0 +1,10 @@ +package com.cs.utils; + +import java.util.Arrays; + +public class Utils { + + public static void printArray(int arr[]) { + System.out.println(Arrays.toString(arr)); + } +} From fcd1b12d54e1c747411abb32d3bbc7de3dea7cd8 Mon Sep 17 00:00:00 2001 From: "nongar09@gmail.com" Date: Wed, 27 Mar 2019 23:17:00 -0400 Subject: [PATCH 3/5] Two way and three way partitions --- src/com/cs/algorithms/QuickSort.java | 59 +++++++++++++++++++++++++--- 1 file changed, 54 insertions(+), 5 deletions(-) diff --git a/src/com/cs/algorithms/QuickSort.java b/src/com/cs/algorithms/QuickSort.java index dae61d0..2346a32 100644 --- a/src/com/cs/algorithms/QuickSort.java +++ b/src/com/cs/algorithms/QuickSort.java @@ -6,20 +6,28 @@ public class QuickSort { public void testQuickSort() { -// int[] arr = new int[]{3, 4, 1, 6, 92, 10}; - int[] arr = new int[]{1, 2, 3, 3, 4}; - quickSort(arr, 0, arr.length - 1); + int[] arr = new int[]{3, 4, 1, 6, 92, 10, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5}; +// int[] arr = new int[]{1, 2, 3, 3, 4}; + quickSortWithThreeWayPartition(arr, 0, arr.length - 1); Utils.printArray(arr); } void quickSort(int[] nums, int start, int end) { if (start < end) { - int pivot = partition(nums, start, end); + int pivot = twoWayPartition(nums, start, end); quickSort(nums, start, pivot - 1); quickSort(nums, pivot + 1, end); } } + void quickSortWithThreeWayPartition(int[] nums, int start, int end) { + if (start < end) { + int[] pivot = threeWayPartition(nums, start, end); + quickSort(nums, start, pivot[0] - 1); + quickSort(nums, pivot[1] + 1, end); + } + } + // Partitioning using pivot as the last element int partition(int[] nums, int start, int end) { @@ -42,6 +50,47 @@ void swap(int nums[], int i, int j) { } - /**/ + /* 2 way partitioning*/ + + int twoWayPartition(int[] nums, int start, int end) { + int pivot = nums[start]; + int i = start; + int j = end + 1; + + while (true) { + while (nums[++i] < pivot) { + } + while (nums[--j] > pivot) { + } + swap(nums, i, j); + if (i >= j) { + break; + } + } + swap(nums, start, i); + return i; + } + + /* 3 way partitioning*/ + + int[] threeWayPartition(int[] nums, int start, int end) { + int pivot = nums[start]; + int lt = start; + int i = start; + int gt = end; + while (i <= gt) { + if (nums[i] == pivot) { + i++; + } else if (nums[i] < pivot) { + swap(nums, lt, i); + i++; + lt++; + } else { + swap(nums, i, gt); + gt--; + } + } + return new int[]{lt, gt}; + } } From f81ce408b9d97ac667f980c504949edbc31bf42c Mon Sep 17 00:00:00 2001 From: "nongar09@gmail.com" Date: Thu, 28 Mar 2019 01:23:06 -0400 Subject: [PATCH 4/5] Added quick select --- src/com/cs/algorithms/QuickSort.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/cs/algorithms/QuickSort.java b/src/com/cs/algorithms/QuickSort.java index 2346a32..ad27a31 100644 --- a/src/com/cs/algorithms/QuickSort.java +++ b/src/com/cs/algorithms/QuickSort.java @@ -40,7 +40,7 @@ int partition(int[] nums, int start, int end) { } } swap(nums, i + 1, end); - return end; + return i + 1; } void swap(int nums[], int i, int j) { From 981fad57993f4cb3c2b1949cc26e0ed97a5a000d Mon Sep 17 00:00:00 2001 From: "nongar09@gmail.com" Date: Thu, 28 Mar 2019 17:55:16 -0400 Subject: [PATCH 5/5] Adding quick select file --- src/Main.java | 8 +++-- src/com/cs/algorithms/QuickSelect.java | 41 ++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 src/com/cs/algorithms/QuickSelect.java diff --git a/src/Main.java b/src/Main.java index b373049..22c32d0 100644 --- a/src/Main.java +++ b/src/Main.java @@ -1,3 +1,4 @@ +import com.cs.algorithms.QuickSelect; import com.cs.algorithms.QuickSort; import java.util.*; @@ -6,8 +7,11 @@ public class Main { public static void main(String[] args) { - QuickSort quickSort = new QuickSort(); - quickSort.testQuickSort(); +// QuickSort quickSort = new QuickSort(); +// quickSort.testQuickSort(); + + QuickSelect quickSelect = new QuickSelect(); + quickSelect.testQuickSelect(); } diff --git a/src/com/cs/algorithms/QuickSelect.java b/src/com/cs/algorithms/QuickSelect.java new file mode 100644 index 0000000..1ea443c --- /dev/null +++ b/src/com/cs/algorithms/QuickSelect.java @@ -0,0 +1,41 @@ +package com.cs.algorithms; + +public class QuickSelect { + + public void testQuickSelect(){ + int[] arr = {1,2,3,4,5,6,7,8}; + int k = kthSmallestElement(arr,0, arr.length-1, 2); + System.out.println(k); + } + + public int kthSmallestElement(int [] arr, int low, int high, int k){ + if (k < 0 || k - 1 > high){ + return Integer.MAX_VALUE; + } + int pivot = partition(arr,low, high); + if (pivot == k - 1){ + return arr[pivot]; + }else if (pivot > k - 1){ + return kthSmallestElement(arr, low, pivot - 1,k); + } + return kthSmallestElement(arr, pivot + 1, high, k); + } + + public int partition(int[] arr, int low, int high){ + int pivot = high; + int i = low-1; + for(int j = low; j < high; j++){ + if(arr[j] < arr[pivot]){ + i++; + swap(arr, i, j); + } + } + swap(arr, i + 1, high); + return i+1; + } + void swap(int nums[], int i, int j) { + int num = nums[i]; + nums[i] = nums[j]; + nums[j] = num; + } +}