C#数据结构与算法系列(二十二):快速排序算法(QuickSort)
2024-10-09 09:26:54
1.介绍
快速排序(QuickSort)是对冒泡排序的一种改进,基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,
其中一部分的所有数据都比另一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归
以此达到整个数据变成有序序列
2.示意图
3.示例
要求:对[-9,78,0,23,-567,70] 进行从大到小排序
public class QuickSort
{
public static void Test()
{
int[] arr = { -, , , , -, }; Sort(arr,,arr.Length-); 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) / ]; //temp临时变量
int temp = ; //while循环的目的是让比middle值小的放在左边 比middle大的值放在右边
while (l<r)
{
//在middle的左边一直找,找到大于等于middle的值才退出
while (arr[l]<middle)
{
l++;
}
//在middle的右边边一直找,找到小于等于middle的值才退出
while (arr[r]>middle)
{
r -= ;
} //如果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 -= ;
} //如果交换完之后,发现这个arr[r]==middle这个值 ,++ 后移
if (arr[r]==middle)
{
l++;
} } //如果l==r,必须l++,r--,否则会出现栈溢出
if (l==r)
{
l += ; r -= ;
} //向左递归
if (left<r)
{
Sort(arr, left, r);
} //向右递归
if (right>l)
{
Sort(arr, l, right);
} }
}
效果图
最新文章
- Node.js入门教程:Node.js如何安装配置并部署第一个网站
- js 数组遍历for..in弊端
- Jquery:小知识;
- C#照片批量压缩小工具
- Linux IO调度器相关算法介绍(转)
- ORACLE数据库常见问题汇总
- linux下查看账号密码的过期时间和设置时间
- One.1
- jupyter的交互小工具-----ipyleaflet
- TCP三次握手的思考?
- unity最基本操作
- swapper_pg_dir主内核页表、init和kthreadd、do_fork时新建子进程页表、vmalloc与kmalloc
- IIS http 错误 401.3 - unauthorized
- 批处理DOS基础命令
- Run ASP.NET MVC site on mac (mono/xamarin studio)
- http://www.cnblogs.com/zhoujinyi/p/3437475.html
- [SharePoint 2010]Sandboxed Solution (沙箱解決方案)
- 使用rosbag记录openni2_launch消息
- hihocoder#1148 : 2月29日 计算闰年的个数
- php学习笔记-continue和break
热门文章
- c#openCV图片传递-尝试读取或写入受保护的内存。这通常指示其他内存已损坏。解决方法
- ArrayList、Vector、LinkedList 区别及底层实现
- android 中使用自定义权限在广播中的利用
- 【Spring注解驱动开发】如何使用@Value注解为bean的属性赋值,我们一起吊打面试官!
- Spring Boot2.x 的Druid连接池配置[附带监控]
- hive中如何查询除了其中某个字段剩余所有字段
- Python-使用tkinter实现的摇骰子小游戏
- css modules是什么?
- css3-pointer-events_demo
- POJ 1852 Ants(贪心)