diff --git a/Sort/Java/Bucket_Sort.java b/Sort/Java/Bucket_Sort.java new file mode 100644 index 0000000..b23a6cb --- /dev/null +++ b/Sort/Java/Bucket_Sort.java @@ -0,0 +1,55 @@ +import java.util.Random; + +public class Bucket_Sort +{ + static int[] sort(int[] sequence, int maxValue) + { + // Bucket Sort + int[] Bucket = new int[maxValue + 1]; + int[] sorted_sequence = new int[sequence.length]; + + for (int i = 0; i < sequence.length; i++) + Bucket[sequence[i]]++; + + int outPos = 0; + for (int i = 0; i < Bucket.length; i++) + for (int j = 0; j < Bucket[i]; j++) + sorted_sequence[outPos++] = i; + + return sorted_sequence; + } + + static void printSequence(int[] sorted_sequence) + { + for (int i = 0; i < sorted_sequence.length; i++) + System.out.print(sorted_sequence[i] + " "); + } + + static int maxValue(int[] sequence) + { + int maxValue = 0; + for (int i = 0; i < sequence.length; i++) + if (sequence[i] > maxValue) + maxValue = sequence[i]; + return maxValue; + } + + public static void main(String args[]) + { + System.out.println("Sorting of randomly generated numbers using BUCKET SORT"); + Random random = new Random(); + int N = 20; + int[] sequence = new int[N]; + + for (int i = 0; i < N; i++) + sequence[i] = Math.abs(random.nextInt(100)); + + int maxValue = maxValue(sequence); + + System.out.println("\nOriginal Sequence: "); + printSequence(sequence); + + System.out.println("\nSorted Sequence: "); + printSequence(sort(sequence, maxValue)); + } +} diff --git a/Sort/Java/HeapSort b/Sort/Java/HeapSort new file mode 100644 index 0000000..46edf61 --- /dev/null +++ b/Sort/Java/HeapSort @@ -0,0 +1,75 @@ + +// Java program for implementation of Heap Sort +public class HeapSort +{ + public void sort(int arr[]) + { + int n = arr.length; + + // Build heap (rearrange array) + for (int i = n / 2 - 1; i >= 0; i--) + heapify(arr, n, i); + + // One by one extract an element from heap + for (int i=n-1; i>=0; i--) + { + // Move current root to end + int temp = arr[0]; + arr[0] = arr[i]; + arr[i] = temp; + + // call max heapify on the reduced heap + heapify(arr, i, 0); + } + } + + // To heapify a subtree rooted with node i which is + // an index in arr[]. n is size of heap + void heapify(int arr[], int n, int i) + { + int largest = i; // Initialize largest as root + int l = 2*i + 1; // left = 2*i + 1 + int r = 2*i + 2; // right = 2*i + 2 + + // If left child is larger than root + if (l < n && arr[l] > arr[largest]) + largest = l; + + // If right child is larger than largest so far + if (r < n && arr[r] > arr[largest]) + largest = r; + + // If largest is not root + if (largest != i) + { + int swap = arr[i]; + arr[i] = arr[largest]; + arr[largest] = swap; + + // Recursively heapify the affected sub-tree + heapify(arr, n, largest); + } + } + + /* A utility function to print array of size n */ + static void printArray(int arr[]) + { + int n = arr.length; + for (int i=0; i