c语言的经典算法
一、排序算法
冒泡排序 (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); } 素数筛法 (埃拉托斯特尼筛法) 用途:高效筛选指定范围内的素数