From 4cf0ba590dc81ae23ab5c5b4572462585e8a2362 Mon Sep 17 00:00:00 2001 From: Jiya <222jiyatiwari@gmail.com> Date: Mon, 21 Jul 2025 10:05:53 +0530 Subject: [PATCH 1/3] Quick Sort & Merge Sort.md --- .../Merge_Sort.md | 123 ++++++++++++++++++ 1 file changed, 123 insertions(+) diff --git a/DSA/2.2 Searching & Sorting Algorithms/Merge_Sort.md b/DSA/2.2 Searching & Sorting Algorithms/Merge_Sort.md index e3014323fd..aa8626a98f 100644 --- a/DSA/2.2 Searching & Sorting Algorithms/Merge_Sort.md +++ b/DSA/2.2 Searching & Sorting Algorithms/Merge_Sort.md @@ -137,3 +137,126 @@ Also, **Space Complexity** of Merge Sort = Space Complexity of Merging + Size of 1. https://www.enjoyalgorithms.com/blog/merge-sort-algorithm 2. https://www.geeksforgeeks.org/merge-sort/ 3. https://en.wikipedia.org/wiki/Merge_sort + + + +Here is the complete **Quick Sort write-up** that you can directly copy and paste into your GitHub `README.md` or any markdown file: + +--- + +# Quick Sort + +## ๐Ÿ“– Introduction + +Quick Sort is a widely used and efficient sorting algorithm based on the **Divide and Conquer** technique. Unlike Merge Sort, Quick Sort works by selecting a pivot element and partitioning the array around the pivot such that elements less than the pivot are on the left, and elements greater are on the right. It then recursively sorts the sub-arrays. + + +## ๐Ÿ’ก Intuition behind Quick Sort + +The algorithm selects a pivot and reorders the array so that all elements less than the pivot come before it and all elements greater come after. This step is known as *partitioning*. After partitioning, the pivot is in its final sorted position. This process is recursively applied to the sub-arrays formed by splitting at the pivot. + + +## ๐Ÿงพ Pseudo Code + +``` +QuickSort(arr[], low, high): + if (low < high): + 1. pi = Partition(arr, low, high) + 2. QuickSort(arr, low, pi - 1) + 3. QuickSort(arr, pi + 1, high) + +Partition(arr[], low, high): + 1. Choose the pivot (usually the last element) + 2. Rearrange elements by comparing with pivot + 3. Return index of pivot after partition +``` + +## ๐Ÿ’ป Code (C) + +```c +#include + +void swap(int* a, int* b) { + int temp = *a; + *a = *b; + *b = temp; +} + +int partition(int arr[], int low, int high) { + int pivot = arr[high]; + int i = low - 1; + for (int j = low; j < high; j++) { + if (arr[j] < pivot) { + i++; + swap(&arr[i], &arr[j]); + } + } + + swap(&arr[i + 1], &arr[high]); + return i + 1; +} + +void quicksort(int arr[], int low, int high) { + if (low < high) { + int pi = partition(arr, low, high); + quicksort(arr, low, pi - 1); + quicksort(arr, pi + 1, high); + } +} + +void printarray(int arr[], int size) { + for (int i = 0; i < size; i++) + printf("%d ", arr[i]); + printf("\n"); +} + +int main() { + int arr[] = {10, 7, 8, 9, 1, 5}; + int n = sizeof(arr) / sizeof(arr[0]); + + printf("Original array: "); + printarray(arr, n); + + quicksort(arr, 0, n - 1); + + printf("Sorted array: "); + printarray(arr, n); + + return 0; +} +``` + + +## โฐ Time and Space Complexity + +| Case | Time Complexity | +| ------- | --------------- | +| Best | O(n log n) | +| Average | O(n log n) | +| Worst | O(nยฒ) | + +* **Space Complexity**: O(log n) (due to recursion stack) +* **In-place**: Yes +* **Stable**: No + +## ๐Ÿ“ Applications + +1. Quick Sort is used in many libraries as the default sorting algorithm (e.g., Python's TimSort is a hybrid). +2. Efficient for large datasets that fit in memory. +3. Useful in scenarios requiring in-place sorting with minimal space. + + +## โ— Drawbacks + +1. Worst-case performance is O(nยฒ), though mitigated using randomized pivoting. +2. Not stable: identical elements may not preserve input order. +3. Recursive implementation can lead to stack overflow if not optimized. + + +## ๐Ÿ“š References + +1. [GeeksforGeeks: Quick Sort](https://www.geeksforgeeks.org/quick-sort/) +2. [Wikipedia: Quicksort](https://en.wikipedia.org/wiki/Quicksort) +3. [Programiz: Quick Sort](https://www.programiz.com/dsa/quick-sort) + + From 44f373546c623ae684f8f531a45e692b29290471 Mon Sep 17 00:00:00 2001 From: Jiya <222jiyatiwari@gmail.com> Date: Mon, 21 Jul 2025 10:08:18 +0530 Subject: [PATCH 2/3] Quick Sort & Merge Sort.md --- DSA/2.2 Searching & Sorting Algorithms/Merge_Sort.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DSA/2.2 Searching & Sorting Algorithms/Merge_Sort.md b/DSA/2.2 Searching & Sorting Algorithms/Merge_Sort.md index aa8626a98f..54f6ca599c 100644 --- a/DSA/2.2 Searching & Sorting Algorithms/Merge_Sort.md +++ b/DSA/2.2 Searching & Sorting Algorithms/Merge_Sort.md @@ -226,6 +226,8 @@ int main() { } ``` +![image](https://media.geeksforgeeks.org/wp-content/uploads/20240926172924/Heap-Sort-Recursive-Illustration.webp) + ## โฐ Time and Space Complexity From d07f94973f59153c2435b6f627d888e7f0aecdb5 Mon Sep 17 00:00:00 2001 From: Jiya <222jiyatiwari@gmail.com> Date: Mon, 21 Jul 2025 10:34:14 +0530 Subject: [PATCH 3/3] Add files via upload --- C_CPP/Data Structures/Hashing/hashing.pdf | Bin 0 -> 611297 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 C_CPP/Data Structures/Hashing/hashing.pdf diff --git a/C_CPP/Data Structures/Hashing/hashing.pdf b/C_CPP/Data Structures/Hashing/hashing.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5c0e3404d537dba092769517cd529303630a6d0c GIT binary patch literal 611297 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