C#数据结构与算法系列(二十二):快速排序算法(QuickSort)
1.介绍
快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,
其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,
整个排序过程可以递归进行,以此达到整个数据变成有序序列
2. 示意图
3. 示例
要求: 对 [-9,78,0,23,-567,70] 进行从小到大排序
public class QuickSort { public static void Test() { int[] arr = { -9, 78, 0, 23, -567, 70 }; Sort(arr,0,arr.Length-1); System.Console.WriteLine(string.Join(",",arr)); } public static void Sort(int[] arr ,int left,int right) { int l = left; int r = right; //中间值 int middle = arr[(l + r) / 2]; //temp临时变量 int temp = 0; //while循环的目的是让比middle值小的放在左边 比middle大的值放在右边 while (l<r) { //在middle的左边一直找,找到大于等于middle的值才退出 while (arr[l]<middle) { l++; } //在middle的右边边一直找,找到小于等于middle的值才退出 while (arr[r]>middle) { r -= 1; } //如果l>=说明middle的左边两边的值,已按照左边全是小于等于middle的值,右边都是大于middle的值 if (l>=r) { break; } //交换 temp = arr[l]; arr[l] = arr[r]; arr[r] = temp; //如果交换完之后,发现这个arr[l]==middle这个值 ,-- 前移 if (arr[l]==middle) { r -= 1; } //如果交换完之后,发现这个arr[r]==middle这个值 ,++ 后移 if (arr[r]==middle) { l++; } } //如果l==r,必须l++,r--,否则会出现栈溢出 if (l==r) { l += 1; r -= 1; } //向左递归 if (left<r) { Sort(arr, left, r); } //向右递归 if (right>l) { Sort(arr, l, right); } } }
效果图
4.总结思想
简而言之就是首先获取数组的中间值 然后将中间值于两边的数据比较 如左边的大于中间值或者右边的小于中间值 那么就替换
然后再进行左右两边递归
微信:17873041739
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?