搜索引擎网站排行榜,网络平台怎么挣钱的,2023年最火的电商平台,张家港做网站以下是C的一些经典算法#xff1a;
一、排序算法
冒泡排序#xff08;Bubble Sort#xff09; 原理#xff1a; 它重复地走访过要排序的数列#xff0c;一次比较两个元素#xff0c;如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换…以下是C的一些经典算法
一、排序算法
冒泡排序Bubble Sort 原理 它重复地走访过要排序的数列一次比较两个元素如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换也就是说该数列已经排序完成。 示例代码
#include iostream
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]) {int temp arr[j];arr[j] arr[j 1];arr[j 1] temp;}}}
}
int main() {int arr[] {5, 4, 3, 2, 1};int n sizeof(arr)/sizeof(arr[0]);bubbleSort(arr, n);for (int i 0; i n; i) {std::cout arr[i] ;}return 0;
}快速排序Quick Sort 原理 它采用了分治的策略。首先选择一个基准元素通常是数组的第一个元素。然后将数组分为两部分小于基准的元素放在左边大于基准的元素放在右边。接着对左右两部分分别进行快速排序直到整个数组有序。 示例代码
#include iostream
int partition(int arr[], int low, int high) {int pivot arr[low];int i low - 1, j high 1;while (true) {do {i;} while (arr[i] pivot);do {j--;} while (arr[j] pivot);if (i j) return j;int temp arr[i];arr[i] arr[j];arr[j] temp;}
}
void quickSort(int arr[], int low, int high) {if (low high) {int pi partition(arr[], low, high);quickSort(arr, low, pi);quickSort(arr, pi 1, high);}
}
int main() {int arr[] {5, 4, 3, 2, 1};int n sizeof(arr)/sizeof(arr[0]);quickSort(arr, 0, n - 1);for (int i 0; i n; i) {std::cout arr[i] ;}return 0;
}归并排序Merge Sort 原理 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法Divide and Conquer的一个非常典型的应用。它将一个数组分成两个子数组对每个子数组进行排序然后将排序好的子数组合并成一个最终的排序数组。 示例代码
#include iostream
void merge(int arr[], int l, int m, int r) {int n1 m - l 1;int n2 r - m;int L[n1], R[n2];for (int i 0; i n1; i)L[i] arr[l i];for (int j 0; j n2; j)R[j] arr[m 1 j];int i 0, j 0, k l;while (i n1 j n2) {if (L[i] R[j]) {arr[k] L[i];i;} else {arr[k] R[j];j;}k;}while (i n1) {arr[k] L[i];i;k;}while (j n2) {arr[k] R[j];j;k;}
}
void mergeSort(int arr[], int l, int r) {if (l r) {int m l(r - l)/2;mergeSort(arr, l, m);mergeSort(arr, m 1, r);merge(arr, l, m, r);}
}
int main() {int arr[] {5, 4, 3, 2, 1};int n sizeof(arr)/sizeof(arr[0]);mergeSort(arr, 0, n - 1);for (int i 0; i n; i) {std::cout arr[i] ;}return 0;
}二、搜索算法
线性搜索Linear Search 原理 线性搜索是一种简单的搜索算法它从数组的第一个元素开始逐个检查每个元素直到找到目标元素或者遍历完整个数组。 示例代码
#include iostream
int linearSearch(int arr[], int n, int key) {for (int i 0; i n; i) {if (arr[i] key)return i;}return -1;
}
int main() {int arr[] {1, 3, 5, 7, 9};int n sizeof(arr)/sizeof(arr[0]);int key 5;int result linearSearch(arr, n, key);if (result -1)std::cout 元素未找到;elsestd::cout 元素在索引 result 处找到;return 0;
}二分搜索Binary Search 原理 二分搜索要求数组是有序的。它首先比较目标元素和数组中间元素的大小。如果目标元素等于中间元素则返回中间元素的索引。如果目标元素小于中间元素则在数组的左半部分继续搜索如果目标元素大于中间元素则在数组的右半部分继续搜索。这个过程不断重复直到找到目标元素或者确定目标元素不存在。 示例代码
#include iostream
int binarySearch(int arr[], int l, int r, int key) {while (l r) {int mid l(r - l)/2;if (arr[mid] key)return mid;else if (arr[mid] key)l mid 1;elser mid - 1;}return -1;
}
int main() {int arr[] {1, 3, 5, 7, 9};int n sizeof(arr)/sizeof(arr[0]);int key 5;int result binarySearch(arr, 0, n - 1, key);if (result -1)std::cout 元素未找到;elsestd::cout 元素在索引 result 处找到;return 0;
}三、图算法
广度优先搜索Breadth - First SearchBFS 原理 广度优先搜索是一种用于遍历或搜索图或树的算法。它从给定的起始顶点开始首先访问起始顶点的所有邻接顶点然后再访问这些邻接顶点的邻接顶点以此类推直到遍历完整个图或者找到目标顶点。通常使用队列来实现。 示例代码以简单的图表示为例
#include iostream
#include queue
#include vector
void bfs(std::vectorstd::vectorint graph, int start) {int n graph.size();std::vectorbool visited(n, false);std::queueint q;visited[start] true;q.push(start);while (!q.empty()) {int vertex q.front();q.pop();std::cout vertex ;for (int neighbor : graph[vertex]) {if (!visited[neighbor]) {visited[neighbor] true;q.push(neighbor);}}}
}
int main() {std::vectorstd::vectorint graph {{1, 2},{0, 3, 4},{0, 4},{1},{1, 2}};bfs(graph, 0);return 0;
}编程是一场与自我之间的战斗也是一场与世界之间的战斗。