C语言的算法
C语言中的算法是指一系列解决问题的明确和有限的步骤,这些步骤可以用C语言编写成程序来执行。算法是编程的核心,它决定了程序如何操作数据以达成特定的目标。以下是一些常见的C语言算法示例:
1. 排序算法
冒泡排序:
c复制代码
|
#include <stdio.h> |
|
|
|
void bubbleSort(int arr[], int n) { |
|
for (int i = 0; i < n-1; i++) { |
|
for (int j = 0; j < n-i-1; j++) { |
|
if (arr[j] > arr[j+1]) { |
|
// 交换 arr[j] 和 arr[j+1] |
|
int temp = arr[j]; |
|
arr[j] = arr[j+1]; |
|
arr[j+1] = temp; |
|
} |
|
} |
|
} |
|
} |
|
|
|
int main() { |
|
int arr[] = {64, 34, 25, 12, 22, 11, 90}; |
|
int n = sizeof(arr)/sizeof(arr[0]); |
|
bubbleSort(arr, n); |
|
printf("Sorted array: \n"); |
|
for (int i=0; i <n; i++) |
|
printf("%d ", arr[i]); |
|
return 0; |
|
} |
2. 搜索算法
线性搜索:
c复制代码
|
#include <stdio.h> |
|
|
|
int linearSearch(int arr[], int n, int x) { |
|
for (int i = 0; i < n; i++) { |
|
if (arr[i] == x) { |
|
return i; // 返回找到的元素的索引 |
|
} |
|
} |
|
return -1; // 如果没有找到,返回-1 |
|
} |
|
|
|
int main() { |
|
int arr[] = {2, 3, 4, 10, 40}; |
|
int x = 10; |
|
int n = sizeof(arr)/sizeof(arr[0]); |
|
int result = linearSearch(arr, n, x); |
|
(result == -1) ? printf("Element is not present in array") |
|
: printf("Element is present at index %d", result); |
|
return 0; |
|
} |
3. 递归算法
阶乘计算:
c复制代码
|
#include <stdio.h> |
|
|
|
unsigned long long factorial(int n) { |
|
if (n == 0) |
|
return 1; |
|
else |
|
return n * factorial(n-1); |
|
} |
|
|
|
int main() { |
|
int num = 5; |
|
printf("Factorial of %d = %llu", num, factorial(num)); |
|
return 0; |
|
} |
4. 数组操作算法
数组元素反转:
c复制代码
|
#include <stdio.h> |
|
|
|
void reverseArray(int arr[], int start, int end) { |
|
while (start < end) { |
|
int temp = arr[start]; |
|
arr[start] = arr[end]; |
|
arr[end] = temp; |
|
start++; |
|
end--; |
|
} |
|
} |
|
|
|
int main() { |
|
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; |
|
int n = sizeof(arr)/sizeof(arr[0]); |
|
reverseArray(arr, 0, n-1); |
|
printf("Reversed array: \n"); |
|
for (int i=0; i <n; i++) |
|
printf("%d ", arr[i]); |
|
return 0; |
|
} |
这些只是C语言中算法的一些基本示例。实际上,算法的种类和复杂度是无穷无尽的,涵盖了从简单排序和搜索到复杂的数据结构、图算法、动态规划等各个领域。学习算法和数据结构是提升编程能力和解决复杂问题能力的关键。