This repo brings together the core algorithms that form the foundation of problem-solving in software development. Each section focuses on a category and contains individual implementations, explanations, and small test examples. The structure is simple, consistent, and easy to expand as you learn.
The intention is to build this as a long-term learning project and keep everything neatly organized.
dsa-algorithms/
│
├── sorting/
│ ├── bubble_sort.ext
│ ├── selection_sort.ext
│ ├── insertion_sort.ext
│ ├── merge_sort.ext
│ ├── quick_sort.ext
│ ├── heap_sort.ext
│ ├── counting_sort.ext
│ └── radix_sort.ext
│
├── searching/
│ ├── linear_search.ext
│ └── binary_search.ext
│
├── recursion_backtracking/
│ ├── factorial.ext
│ ├── fibonacci.ext
│ ├── subsets.ext
│ ├── permutations.ext
│ ├── combination_sum.ext
│ ├── n_queens.ext
│ └── sudoku_solver.ext
│
├── linked_list/
│ ├── reverse_linked_list.ext
│ ├── detect_cycle.ext
│ ├── merge_two_sorted_lists.ext
│ ├── remove_nth_from_end.ext
│ └── intersection_of_two_lists.ext
│
├── stacks_queues/
│ ├── valid_parentheses.ext
│ ├── min_stack.ext
│ ├── queue_using_stacks.ext
│ ├── stack_using_queues.ext
│ ├── sliding_window_maximum.ext
│ └── next_greater_element.ext
│
├── trees/
│ ├── inorder_traversal.ext
│ ├── preorder_traversal.ext
│ ├── postorder_traversal.ext
│ ├── level_order.ext
│ ├── height_of_tree.ext
│ ├── diameter_of_tree.ext
│ ├── is_symmetric.ext
│ ├── lowest_common_ancestor.ext
│ ├── validate_bst.ext
│ └── build_tree_from_traversals.ext
│
├── graphs/
│ ├── bfs.ext
│ ├── dfs.ext
│ ├── cycle_detection_undirected.ext
│ ├── cycle_detection_directed.ext
│ ├── topological_sort.ext
│ ├── dijkstra.ext
│ ├── bellman_ford.ext
│ ├── floyd_warshall.ext
│ ├── kruskal_mst.ext
│ └── prim_mst.ext
│
├── dynamic_programming/
│ ├── fibonacci_dp.ext
│ ├── climbing_stairs.ext
│ ├── lis.ext
│ ├── lcs.ext
│ ├── edit_distance.ext
│ ├── knapsack.ext
│ ├── coin_change.ext
│ └── kadane.ext
│
├── greedy/
│ ├── activity_selection.ext
│ ├── fractional_knapsack.ext
│ ├── huffman_coding.ext
│ └── interval_scheduling.ext
│
├── strings/
│ ├── sliding_window.ext
│ ├── kmp.ext
│ ├── rabin_karp.ext
│ ├── z_algorithm.ext
│ ├── trie_operations.ext
│ └── longest_palindromic_substring.ext
│
├── bit_manipulation/
│ ├── count_set_bits.ext
│ ├── power_of_two.ext
│ ├── single_number.ext
│ └── bitmasking.ext
│
├── math/
│ ├── gcd_lcm.ext
│ ├── sieve_of_eratosthenes.ext
│ ├── fast_exponentiation.ext
│ └── modular_arithmetic.ext
│
└── README.md
Each folder represents a topic. Inside, every file focuses on one algorithm with a short explanation, the code implementation, and a small test section. You can keep extending the repo as you work through more problems.
Use it as a reference, a learning project, or even a base for interview prep.
This structure gives you room to grow while keeping everything organized and approachable.