博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【C#】3.算法温故而知新 - 快速排序
阅读量:5965 次
发布时间:2019-06-19

本文共 1789 字,大约阅读时间需要 5 分钟。

快速排序相比冒泡排序,每次交换是跳跃式的。每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数放到基准点的右边。这样每次交换的时候就不会像冒泡排序一样只能在相邻的数之间进行交换,交换的距离就大得多了。因此总的比较和交换次数就少了,速度自然就提高了。

当在最坏的情况下,仍可能是相邻的两个数进行交换,因此快速排序的最差时间复杂度和冒泡排序一样,都是O(N²),它的平均时间复杂度为O(N㏒N)。

 

示例图片如下

 

 

 

代码:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{    public class Program    {        private static int[] a = new int[10] { 6, 1, 2, 7, 9, 3, 4, 5, 10, 8 };//初始化一个数组,其中有10个数,这里假定是我们输入的数,需要从小到大排序        public static void Main(string[] args)        {            QuickSort(0, a.Length - 1);//最左边数和最右边数的下标            //输出排序后的结果            for (int i = 0; i < a.Length; i++)                Console.Write("  " + a[i]);        }        /// 交换方法         /// 最左边数的下标        /// 最右边数的下标        private static void QuickSort(int left, int right)        {            int i, j, t, temp;            if (left > right)//下标交错即返回                return;            temp = a[left];//temp中存的就是基准数,假定最左边的数为基准数            i = left;//左边数的下标            j = right;//右边数的下标            while (i != j)//当下标不相等时,直到i=j时停止            {                //顺序很重要,要先从右往左找                while (a[j] >= temp && i < j)//找到大于基准数的数                    j--;                //再从从左往右找                while (a[i] <= temp && i < j)//找到小于基准数的数                    i++;                //交换两个数在数组中的位置                if (i < j)                {                    t = a[i];                    a[i] = a[j];                    a[j] = t;                }            }            //最终将基准数归位            a[left] = a[i];            a[i] = temp;            QuickSort(left, i - 1);//继续处理左边的,这里是一个递归的过程            QuickSort(i + 1, right);//继续处理右边的,这里是一个递归的过程        }    }}
本文转自叶超Luka博客园博客,原文链接:http://www.cnblogs.com/yc-755909659/p/3988414.html,如需转载请自行联系原作者
你可能感兴趣的文章
洛谷 P2486 BZOJ 2243 [SDOI2011]染色
查看>>
数值积分中的辛普森方法及其误差估计
查看>>
Web service (一) 原理和项目开发实战
查看>>
跑带宽度多少合适_跑步机选购跑带要多宽,你的身体早就告诉你了
查看>>
深入理解Java的接口和抽象类
查看>>
Javascript异步数据的同步处理方法
查看>>
iis6 zencart1.39 伪静态规则
查看>>
SQL Server代理(3/12):代理警报和操作员
查看>>
Linux备份ifcfg-eth0文件导致的网络故障问题
查看>>
2018年尾总结——稳中成长
查看>>
JFreeChart开发_用JFreeChart增强JSP报表的用户体验
查看>>
度量时间差
查看>>
通过jsp请求Servlet来操作HBASE
查看>>
Shell编程基础
查看>>
Shell之Sed常用用法
查看>>
3.1
查看>>
校验表单如何摆脱 if else ?
查看>>
<气场>读书笔记
查看>>
Centos下基于Hadoop安装Spark(分布式)
查看>>
3D地图的定时高亮和点击事件(基于echarts)
查看>>