C#算法之快速排序

server/2024/9/23 4:49:36/

        算法释义:朋友们,我们在上文中说到,归并算法是一种分治算法,同样的,快速排序也是一种分治算法。所谓分治算法,原理上来说,是将规模为N的问题分解为若干个规模为较小的M的问题,这些子问题相互独立,并且原理相同,我们把子问题的解都求解完毕,自然就把最初的问题解决掉了。

        再说快速排序,它的基本思想是选择一个元素作为“基准”(pivot),然后重新排列数组,使得所有比基准小的元素都在基准的左边,所有比基准大的元素都在基准的右边。这个过程称为分区。之后,递归地对基准左边和右边的子数组进行同样的操作。

        当然了,在实际应用中,根据具体的需求,进行分区,不一定是两个,可以是N个。好,我们一起来看代码:

    public static void Main(){int[] array = { 10, 7, 8, 9, 1, 5 };Console.WriteLine("Given Array");PrintArray(array);QuickSort(array, 0, array.Length - 1);Console.WriteLine("\nSorted array");PrintArray(array);}// 快速排序的主要函数public static void QuickSort(int[] array, int low, int high){if (low < high){// 分区并获取基准的索引int pivotIndex = Partition(array, low, high);// 递归地对基准左边和右边的子数组进行快速排序QuickSort(array, low, pivotIndex - 1);QuickSort(array, pivotIndex + 1, high);}}// 分区函数public static int Partition(int[] array, int low, int high){// 选择最后一个元素作为基准int pivot = array[high];int i = low - 1;for (int j = low; j < high; j++){// 如果当前元素小于或等于基准if (array[j] <= pivot){i++;// 交换 array[i] 和 array[j]Swap(array, i, j);}}// 将基准元素放到正确的位置Swap(array, i + 1, high);return i + 1;}// 交换数组中的两个元素public static void Swap(int[] array, int i, int j){int temp = array[i];array[i] = array[j];array[j] = temp;}// 打印数组的函数public static void PrintArray(int[] array){foreach (int item in array){Console.Write(item + " ");}Console.WriteLine();}


http://www.ppmy.cn/server/25105.html

相关文章

影响外汇交易盈利的因素有哪些?

外汇交易就是通过汇率的差价来赚取相应的利润。在外汇交易中&#xff0c;投资者是否可以盈利&#xff0c;主要取决于是否正确的判断了市场趋势和行情。投资者在交易过程中受到主观和客观的因素影响&#xff0c;具体包含这些内容。 影响外汇交易盈利的因素有哪些&#xff1f; 1、…

[leetcode] B树是不是A树的子结构

给定两棵二叉树 tree1 和 tree2&#xff0c;判断 tree2 是否以 tree1 的某个节点为根的子树具有 相同的结构和节点值 。 注意&#xff0c;空树 不会是以 tree1 的某个节点为根的子树具有 相同的结构和节点值 。 示例 1&#xff1a; 输入&#xff1a;tree1 [1,7,5], tree2 [6,…

vue-print-nb插件来实现打印功能——打印布局及尺寸处理

之前写过一篇文章是关于vue-print-nb插件实现打印功能&#xff0c; vue插件——vue-print-nb 实现打印功能:http://t.csdnimg.cn/ahuxp 但是在实际使用过程中&#xff0c;打印的效果不尽如人意。下面把打印页面和遇到的问题做一下汇总&#xff1a; 1.html代码——给打印元素绑…

Spring Boot 3.2.5 集成 mysql

版本 Spring Boot 3.2.5 第一步&#xff0c;添加必要依赖 // mysql jdbc 及 驱动 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency><gr…

内存溢出如何实现自动化重启

linux内存溢出系统自动化重启 为了在Linux系统中自动化处理内存溢出&#xff08;Out of Memory, OOM&#xff09;情况并重启系统&#xff0c;你可以使用以下步骤和脚本&#xff1a; 使用cron守护进程来定期检查内存使用情况。 如果内存使用量超过某个阈值&#xff0c;触发系统…

优化SQL的方法

来自组内分享&#xff0c;包含了比较常使用到的八点&#xff1a; 避免使用select * union all代替union 小表驱动大表 批量操作 善用limit 高效的分页 用连接查询代替子查询 控制索引数量 一、避免使用select * 消耗数据库资源 消耗更多的数据库服务器内存、CPU等资源。 消…

云计算---机器学习(决赛准备)

任务 &#x1d447; &#xff1a;机器学习系统应该如何处理样本 性能度量 &#x1d443; &#xff1a;评估机器学习算法的能力。如准确率、错误率。 经验 &#x1d438; &#xff1a;大部分学习算法可以被理解为在整个数据集上获取经验。有些机器学习 的算法并不是训练于一个…

少儿Python的学习范围和学习方法

当孩子学习Python时&#xff0c;可以根据他们的年龄和兴趣选择合适的学习资源和方法。以下是一些更详细的建议&#xff1a; 创意编程&#xff1a;让孩子通过编写有趣的小程序或游戏来学习Python&#xff0c;可以激发他们的兴趣和创造力&#xff0c;提高学习的积极性。 视频教程…