-
Arrays: Linear data structure with a fixed size, allowing random access to elements.
- Best for: Static datasets with frequent element access.
- Complexity:
- Access: O(1)
- Search: O(n)
- Insertion/Deletion: O(n) Array
-
Linked Lists: Linear structure of nodes, where each node points to the next.
- Types: Singly, Doubly, Circular.
- Best for: Dynamic datasets with frequent insertions/deletions.
- Complexity:
- Access/Search: O(n)
- Insertion/Deletion: O(1) (at head/tail with pointer)
-
Hash Maps (or Hash Tables): Key-value pair storage with a hash function.
Posts for: #DSA
Array
1. Sorting Algorithms
Sorting arranges elements in a specific order (ascending or descending).
- Bubble Sort – Repeatedly swaps adjacent elements if they are in the wrong order.
- Selection Sort – Selects the smallest/largest element and places it in order.
- Insertion Sort – Builds the sorted array one element at a time.
- Merge Sort – Uses the divide-and-conquer technique to sort.
- Quick Sort – Selects a pivot and partitions elements around it.
- Heap Sort – Uses a binary heap to sort efficiently.
- Radix Sort – Sorts numbers digit by digit.
- Counting Sort – Counts occurrences of elements (used for small range values).
- Sorting
2. Searching Algorithms
Used to find an element in an array.
Searching
1. Linear Search
- Approach: Sequentially checks each element in the array.
- Time Complexity:
- Best: O(1)
- Worst: O(n)
- Average: O(n)
- Space Complexity: O(1)
2. Binary Search (For Sorted Arrays Only)
- Approach: Repeatedly divides the array in half and searches in the relevant half.
- Time Complexity:
- Best: O(1)
- Worst: O(log n)
- Average: O(log n)
- Space Complexity:
- O(1) (Iterative)
- O(log n) (Recursive, due to function call stack)
3. Jump Search (For Sorted Arrays)
- Approach: Jumps ahead by a block size (√n) and does a linear search within that block.
- Time Complexity:
- Best: O(1)
- Worst: O(√n)
- Average: O(√n)
- Space Complexity: O(1)
4. Interpolation Search (For Uniformly Distributed Sorted Data)
Approach: Uses the formula to estimate the probable position of the target. $$ pos=left+ \frac {(target−arr[left])×(right−left)}{(arr[right]−arr[left])} $$
_index
Hi this is my DSA Journey
Sorting
Sort
1. Comparison-Based Sorting
These algorithms compare elements to determine their order.
a. Bubble Sort
- Repeatedly swaps adjacent elements if they are in the wrong order.
- Time Complexity: O(n²)
- Space Complexity: O(1)
b. Selection Sort
- Finds the smallest element and places it in the correct position.
- Time Complexity: O(n²)
- Space Complexity: O(1)
c. Insertion Sort
- Picks one element at a time and places it in its correct position.
- Time Complexity: O(n²)
- Space Complexity: O(1)
- Efficient for small or nearly sorted data.
d. Merge Sort (Divide and Conquer)
- Divides the array into halves, sorts them, and merges them.
- Time Complexity: O(n log n)
- Space Complexity: O(n)
e. Quick Sort (Divide and Conquer)
- Picks a pivot, partitions the array, and sorts recursively.
- Time Complexity: O(n log n) (Best & Avg), O(n²) (Worst)
- Space Complexity: O(log n) (due to recursion)
f. Heap Sort
- Converts the array into a heap and extracts elements in order.
- Time Complexity: O(n log n)
- Space Complexity: O(1)
g. Shell Sort
- Variation of insertion sort that sorts elements at a gap.
- Time Complexity: O(n log n) (Best), O(n²) (Worst)
- Space Complexity: O(1)
2. Non-Comparison-Based Sorting
These algorithms do not compare elements directly.