当编写程序时 , 了解和使用不同的算法对解决问题至关重要 。以下是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算法:
推荐阅读
- DDoS为什么是黑客常用的攻击手段?
- 柴油发动机:耐用的秘密武器,为何国内家用车市场不买账?
- 高中生母亲节送什么礼物好实用的 高中生母亲节送什么礼物好
- 太阳能的混水阀怎么安装不漏水 长期不用的太阳能如何拆卸
- 显微镜的重点知识 显微镜使用的基本常识考题
- 114是什么电话 114是什么电话是干什么用的
- Linux中创建文件常用的八种方法
- 造梦西游ol至尊武器怎么得,造梦西游ol没用的装备怎么办
- 交流电属于什么研究生专业,工程上所用的交流电主要指什么
- 端午节艾草的功效与作用 端午节艾草是干什么用的