前言:
目前看官们对“c语言精品”大致比较关注,朋友们都需要剖析一些“c语言精品”的相关资讯。那么小编同时在网上搜集了一些对于“c语言精品””的相关文章,希望兄弟们能喜欢,姐妹们快快来学习一下吧!以下是我认为是史上最优雅的10个C语言代码片段,它们展示了C语言的深度和优雅之处:
快速排序算法
void quicksort(int *arr, int low, int high) { int pivot, i, j, temp; if (low < high) { pivot = low; i = low; j = high; while (i < j) { while (arr[i] <= arr[pivot] && i <= high) i++; while (arr[j] > arr[pivot] && j >= low) j--; if (i < j) { temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } temp = arr[j]; arr[j] = arr[pivot]; arr[pivot] = temp; quicksort(arr, low, j - 1); quicksort(arr, j + 1, high); }}
快速排序是一种基于分治思想的排序算法,它将一个数组分成两个子数组,再分别对这两个子数组进行排序,最终将子数组合并成一个有序数组。这个代码片段实现了快速排序算法,并且使用了优雅的递归结构。
反转字符串
void reverse(char *str) { char *end = str; char tmp; if (str) { while (*end) { ++end; } --end; while (str < end) { tmp = *str; *str++ = *end; *end-- = tmp; } }}
这个代码片段实现了反转字符串的功能。它使用了指针来遍历字符串,同时也使用了指针交换的技巧,这些技巧让代码更加优雅。
斐波那契数列
int fibonacci(int n) { if (n <= 1) { return n; } return fibonacci(n - 1) + fibonacci(n - 2);}
斐波那契数列是一个非常常见的数列,它的每个元素都是前两个元素的和。这个代码片段实现了递归的斐波那契数列计算,代码非常简洁和优雅。
二分查找算法
int binary_search(int arr[], int low, int high, int key) { if (high < low) { return -1; } int mid = low + (high - low) / 2; if (key == arr[mid]) { return mid; } if (key < arr[mid]) { return binary_search(arr, low, mid - 1, key); } else { return binary_search(arr, mid + 1, high, key); }}
二分查找算法是一种高效的查找算法,它的时间复杂度为O(log n)。这个代码片段实现了二分查找算法,并使用了递归的结构。
选择排序算法
void selection_sort(int arr[], int n) { int i, j, min_idx; for (i = 0; i < n-1; i++) { min_idx = i; for (j = i+1; j < n; j++) { if (arr[j] < arr[min_idx]) { min_idx = j; } } swap(&arr[min_idx], &arr[i]); }}
选择排序算法是一种简单直观的排序算法,它的时间复杂度为O(n^2)。这个代码片段实现了选择排序算法,并使用了swap函数来交换元素。
链表反转
void reverse_list(struct ListNode** head) { struct ListNode* prev = NULL; struct ListNode* current = *head; struct ListNode* next = NULL; while (current != NULL) { next = current->next; current->next = prev; prev = current; current = next; } *head = prev;}
链表反转是一个常见的操作,这个代码片段实现了链表反转,并且使用了指针的技巧来实现。
线性查找算法
int linear_search(int arr[], int n, int x) { int i; for (i = 0; i < n; i++) { if (arr[i] == x) { return i; } } return -1;}
线性查找算法是一种简单直观的查找算法,它的时间复杂度为O(n)。这个代码片段实现了线性查找算法。
插入排序算法
void insertion_sort(int arr[], int n) { int i, j, key; for (i = 1; i < n; i++) { key = arr[i]; j = i - 1; while (j >= 0 && arr[j] > key) { arr[j+1] = arr[j]; j = j - 1; } arr[j+1] = key; }}
插入排序算法是一种简单直观的排序算法,它的时间复杂度为O(n^2)。这个代码片段实现了插入排序算法。
最大公约数
int gcd(int a, int b) { if (b == 0) { return a; } return gcd(b, a % b);}
最大公约数是两个整数的公共因数中最大的那个数,这个代码片段实现了递归的求最大公约数的算法。
字符串转换为整数
int my_atoi(char *str) { int res = 0; int sign = 1; int i = 0; if (str[0] == '-') { sign = -1; i++; } for (; str[i] != '\0'; ++i) { if (str[i] < '0' || str[i] > '9') { break; } res = res * 10 + str[i] - '0'; } return sign * res;}
这个代码片段实现了将字符串转换为整数的算法,可以处理负数和正数。这个实现还考虑了非数字字符的情况,一旦遇到非数字字符就停止转换并返回当前已经转换的结果。
标签: #c语言精品