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

本文共 1704 字,大约阅读时间需要 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);//继续处理右边的,这里是一个递归的过程        }    }}

 

转载地址:http://euzra.baihongyu.com/

你可能感兴趣的文章
redis源码笔记 - initServer
查看>>
FindBugs工具常见问题
查看>>
ECSHOP报错误Deprecated: preg_replace(): The /e modifier is depr
查看>>
【iOS】iOS之Button segue弹出popOver消除(dismiss)问题
查看>>
java多线程系列5-死锁与线程间通信
查看>>
数据库分库分表
查看>>
腾讯Hermes设计概要——数据分析用的是列存储,词典文件前缀压缩,倒排文件递增id、变长压缩、依然是跳表-本质是lucene啊...
查看>>
小程序模板嵌套以及相关遍历数据绑定
查看>>
Systemd入门教程:命令篇(转)
查看>>
java随机范围内的日期
查看>>
linux包之diff
查看>>
spring事务学习(转账案例)(二)
查看>>
[官方教程] [ES4封装教程]1.使用 VMware Player 创建适合封装的虚拟机
查看>>
http协议与http代理
查看>>
【iOS开发-91】GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例...
查看>>
Redis+Spring缓存实例
查看>>
Storm集群安装详解
查看>>
centos7.x搭建svn server
查看>>
原码编译安装openssh6.7p1
查看>>
项目实战:自定义监控项--监控CPU信息
查看>>