程序开发中常用的十种算法,你用过几种?

当编写程序时 , 了解和使用不同的算法对解决问题至关重要 。以下是C#中常用的10种算法,每个算法都伴随着示例代码和详细说明 。
1. 冒泡排序 (Bubble Sort):
冒泡排序是一种简单的比较排序算法,它多次遍历数组,将较大的元素逐渐浮动到数组的末尾 。
public static void BubbleSort(int[] arr){int n = arr.Length;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;}}}}2. 快速排序 (Quick Sort):
【程序开发中常用的十种算法,你用过几种?】快速排序是一种高效的分治排序算法,它通过选择一个基准元素并将数组分为较小和较大的两部分来进行排序 。
public static void QuickSort(int[] arr, int low, int high){if (low < high){int partitionIndex = Partition(arr, low, high);QuickSort(arr, low, partitionIndex - 1);QuickSort(arr, partitionIndex + 1, high);}}public static int Partition(int[] arr, int low, int high){int pivot = arr[high];int i = low - 1;for (int j = low; j < high; j++){if (arr[j] < pivot){i++;int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}int swap = arr[i + 1];arr[i + 1] = arr[high];arr[high] = swap;return i + 1;}3. 合并排序 (Merge Sort):
合并排序是一种稳定的分治排序算法 , 它将数组分成两半,分别排序后再合并 。
public static void MergeSort(int[] arr){int n = arr.Length;if (n > 1){int mid = n / 2;int[] left = new int[mid];int[] right = new int[n - mid];for (int i = 0; i < mid; i++)left[i] = arr[i];for (int i = mid; i < n; i++)right[i - mid] = arr[i];MergeSort(left);MergeSort(right);int i = 0, j = 0, k = 0;while (i < mid && j < (n - mid)){if (left[i] < right[j])arr[k++] = left[i++];elsearr[k++] = right[j++];}while (i < mid)arr[k++] = left[i++];while (j < (n - mid))arr[k++] = right[j++];}}4. 二分查找 (Binary Search):
二分查找是一种高效的查找算法,它要求在有序数组中查找特定元素 。
public static int BinarySearch(int[] arr, int target){int low = 0, high = arr.Length - 1;while (low <= high){int mid = (low + high) / 2;if (arr[mid] == target)return mid;else if (arr[mid] < target)low = mid + 1;elsehigh = mid - 1;}return -1;}5. 深度优先搜索 (Depth-First Search, DFS):
DFS 是一种图遍历算法,它从起始节点开始,沿着路径尽可能深入,然后返回并继续搜索 。
using System;using System.Collections.Generic;public class Graph{private int V;private List<int>[] adj;public Graph(int v){V = v;adj = new List<int>[v];for (int i = 0; i < v; i++)adj[i] = new List<int>();}public void AddEdge(int v, int w){adj[v].Add(w);}public void DFS(int v){bool[] visited = new bool[V];DFSUtil(v, visited);}private void DFSUtil(int v, bool[] visited){visited[v] = true;Console.Write(v + " ");foreach (var n in adj[v]){if (!visited[n])DFSUtil(n, visited);}}}6. 广度优先搜索 (Breadth-First Search, BFS):
BFS 是一种图遍历算法,它从起始节点开始,逐层遍历,先访问所有相邻的节点,然后再逐层扩展 。
using System;using System.Collections.Generic;public class Graph{private int V;private List<int>[] adj;public Graph(int v){V = v;adj = new List<int>[v];for (int i = 0; i < v; i++)adj[i] = new List<int>();}public void AddEdge(int v, int w){adj[v].Add(w);}public void BFS(int s){bool[] visited = new bool[V];Queue<int> queue = new Queue<int>();visited[s] = true;queue.Enqueue(s);while (queue.Count != 0){s = queue.Dequeue();Console.Write(s + " ");foreach (var n in adj[s]){if (!visited[n]){visited[n] = true;queue.Enqueue(n);}}}}}7. Dijkstra算法:
Dijkstra算法是一种用于查找图中最短路径的算法 。
public class Dijkstra{private static int V = 9;private int MinDistance(int[] dist, bool[] sptSet){int min = int.MaxValue;int minIndex = 0;for (int v = 0; v < V; v++){if (!sptSet[v] && dist[v] <= min){min = dist[v];minIndex = v;}}return minIndex;}private void PrintSolution(int[] dist){Console.WriteLine("Vertex t Distance from Source");for (int i = 0; i < V; i++){Console.WriteLine(i + " t " + dist[i]);}}public void FindShortestPath(int[,] graph, int src){int[] dist = new int[V];bool[] sptSet = new bool[V];for (int i = 0; i < V; i++){dist[i] = int.MaxValue;sptSet[i] = false;}dist[src] = 0;for (int count = 0; count < V - 1; count++){int u = MinDistance(dist, sptSet);sptSet[u] = true;for (int v = 0; v < V; v++){if (!sptSet[v] && graph[u, v] != 0 && dist[u] != int.MaxValue && dist[u] + graph[u, v] < dist[v]){dist[v] = dist[u] + graph[u, v];}}}PrintSolution(dist);}}8. 最小生成树 (Minimum Spanning Tree, MST) - Prim算法:


推荐阅读