一、排序算法

冒泡排序 (Bubble Sort)

原理:通过相邻元素两两比较交换,使最大元素逐渐"浮"到数组末尾。

时间复杂度:O(n²)

代码片段:

c

void bubbleSort(int arr[], int n) {

for (int i=0; i

for (int j=0; j

if (arr[j] > arr[j+1])

swap(&arr[j], &arr[j+1]);

}

快速排序 (Quick Sort)

原理:分治思想,选取基准元素将数组分为左右两部分递归排序。

时间复杂度:平均O(n log n),最坏O(n²)

核心代码:

c

int partition(int arr[], int low, int high) {

int pivot = arr[high];

int i = low - 1;

for (int j=low; j

if (arr[j] < pivot) swap(&arr[++i], &arr[j]);

swap(&arr[i+1], &arr[high]);

return i+1;

}

二、查找算法

二分查找 (Binary Search)

前提:有序数组

时间复杂度:O(log n)

代码逻辑:

c

int binarySearch(int arr[], int l, int r, int target) {

while (l <= r) {

int mid = l + (r-l)/2;

if (arr[mid] == target) return mid;

else if (arr[mid] < target) l = mid+1;

else r = mid-1;

}

return -1;

}

三、数据结构相关算法

链表逆置 (Reverse Linked List)

核心思想:三指针法修改节点指向

c

struct Node* reverseList(struct Node* head) {

struct Node *prev = NULL, *curr = head, *next;

while (curr) {

next = curr->next;

curr->next = prev;

prev = curr;

curr = next;

}

return prev;

}

二叉树遍历

深度优先 (DFS):递归实现前序/中序/后序遍历

广度优先 (BFS):使用队列层序遍历

四、动态规划 (Dynamic Programming)

斐波那契数列 (Fibonacci)

优化:避免递归重复计算,使用数组缓存结果

c

int fib(int n) {

int dp[n+1];

dp[0]=0; dp[1]=1;

for(int i=2; i<=n; i++)

dp[i] = dp[i-1] + dp[i-2];

return dp[n];

}

背包问题 (0-1 Knapsack)

核心方程:dp[i][w] = max(value[i]+dp[i-1][w-weight[i]], dp[i-1][w])

五、图算法

Dijkstra最短路径

适用场景:权重非负的有向图

核心:贪心策略 + 优先队列优化

Floyd-Warshall算法

特点:多源最短路径,通过三重循环动态更新距离矩阵

六、字符串处理

KMP模式匹配

优化:通过部分匹配表跳过无效比较

关键:计算最长前缀后缀公共长度(LPS数组)

七、数学算法

欧几里得算法 (GCD)

c

int gcd(int a, int b) {

return b==0 ? a : gcd(b, a%b);

}

素数筛法 (埃拉托斯特尼筛法)

用途:高效筛选指定范围内的素数