快速排序的主要思路:

1.在数组首尾处各设一个标记

2.取出数组第一个值作为中枢值

3.所有数据跟中枢值比较:比中枢值小的放中枢值左边,首部标记++往右推一位,大的放中枢值右边,尾部标记--往左推一位(从小到大排序)

4.先从尾部开始与中枢值比较,如果尾部标记的值比中枢值大直接把标记往左推一位,如果尾部标记比中枢值小就把尾部标记的值放到首部标记的位置,然后开始从首部开始与中枢值比较,如果首部标记的值比中枢值小直接把标记往右推一位,如果首部标记比中枢值大就把首部标记的值放到尾部标记的位置,一直循环直至首尾标记相遇。

5.首尾标记相遇代表找到了中枢值的准确位置,此时将数组从中枢值一分为二,使用递归继续对中枢值左右两侧的数据使用相同的方法进行排序;

C#示例代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace QuickSort
{
class Program
{
static void Main(string[] args)
{
int[] array = { 7, 1, 5, 4, 6, 7, 3, 9, 8, 2 };
QuickSort(0, 9, ref array);
for (int i = 0; i < 10; i++)
{
Console.WriteLine(array[i]);
}
return;
} static void QuickSort(int iMin,int iMax,ref int[] a)
{
int i = iMin, j = iMax, iPivot = a[iMin];
if (iMin >= iMax)
{
return;
}
while (i < j)
{
while (a[j] >= iPivot && i < j)
{
j--;
}
if (i < j)
{
a[i] = a[j];
i++;
}
while (a[i] <= iPivot && i < j)
{
i++;
}
if (i < j)
{
a[j] = a[i];
j--;
}
}
a[i] = iPivot;
QuickSort(iMin, i - 1, ref a);
QuickSort(i + 1, iMax, ref a);
}
}
}

相关视频链接:https://ke.qq.com/webcourse/index.html#course_id=150239&term_id=100171220&taid=686915594635999&vid=b1411uydxse

数据结构-快速排序(C#实现)的更多相关文章

  1. [数据结构] 快速排序C语言程序

    //由大到小//快速排序(待排序数组,左侧起点,右侧起点) void quickSort(int *array, int l, int r) { if ( l >= r) return; int ...

  2. JAVA数据结构--快速排序

    快排概念 快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),一种排序算法,最早由东尼·霍尔提出.在平均状况下,排序个项目要(大O符号)次比较.在 ...

  3. python算法与数据结构-快速排序算法(36)

    一.快速排序的介绍 快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外 ...

  4. Summary

    PDF 暑假开始准备转移博客,试了几个都不怎么满意(我还去试了下LineBlog 不知道那时候在想什么..),屯着一堆文章,,到时候一起发了 现在暂时转移至WordPress,不过还在完善中,预计.. ...

  5. 你见过的最全面的python重点

    首先和大家说个对不起,由于总结了太多的东西,所以篇幅有点长,这也是我"缝缝补补"总结了好久的东西,对于Nginx的东西我没总结在这里,大家可以Python聚焦看,点击直达专栏哦. ...

  6. 你见过的最全面的 Python 重点

    由于总结了太多的东西,所以篇幅有点长,这也是我"缝缝补补"总结了好久的东西. Py2 VS Py3 print成为了函数,python2是关键字 不再有unicode对象,默认st ...

  7. Python学习进阶

    阅读目录 一.python基础 二.python高级 三.python网络 四.python算法与数据结构 一.python基础 人生苦短,我用Python(1) 工欲善其事,必先利其器(2) pyt ...

  8. 数据结构-栈(应用篇)之快速排序法-C和C++的实现

    一.原理解析 快速排序法: 基本思路是,从第一个元素开始,把所有比它大的元素放在它后面,把所有比它小的元素放前面.然后划分它前面和后面的所有元素,分别再做快速排序,直到无法再划分为止. 在以下程序案例 ...

  9. javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法)

    javascript数据结构与算法--高级排序算法(快速排序法,希尔排序法) 一.快速排序算法 /* * 这个函数首先检查数组的长度是否为0.如果是,那么这个数组就不需要任何排序,函数直接返回. * ...

随机推荐

  1. MyEclipse安装Eclipse Memory Analyzer插件以及使用例子

    一 :安装 1.Memory Analyzer 插件下载地址:http://www.eclipse.org/mat/downloads.php 2.将下载的文件解压到MyEclipse的  dropi ...

  2. 数据库(Mongodb)

    1.MongoClient()函数 In [8]: import pymongo In [9]: con = pymongo.MongoClient('localhost') #建立连接 In [10 ...

  3. 关于Linux中文件,链接的一些思考

    在Unix系统中,操作系统为磁盘上的文本与图像,鼠标键盘操作,网络交互等IO操作设计了一组通用API. 使他们被处理的时候可统一用字节流的方式.所以说,除了进程之外,其他的一切均可看做文件. Linu ...

  4. Java基础学习笔记十九 IO

    File IO概述 回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了.那怎么办呢?能不能把运算完的数据都保存下来,下次程序启动的时候,再 ...

  5. nginx session 配置失效解决

    nginx 反向代理后台web服务器session path导致的session 失效,特此总结下配置方法: 配置如下: location ^~ /2016tyjf_dev/djwechat { pr ...

  6. Beta冲刺第一天

    一.昨天的困难 Beta阶段第一天,主要进行本阶段的计划和任务分配,主要问题是上阶段所做的测试工作较少,本阶段需要加强测试工作,并不断修复检测出来的BUG. 二.今天进度 所有成员写简单测试测试整体应 ...

  7. nyoj 第几是谁

    第几是谁? 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 现在有"abcdefghijkl"12个字符,将其按字典序排列,如果给出任意一种排列, ...

  8. 从集合的无序性看待关系型数据库中的"序"

    本文目录:1.集合的特征2.集合的无序性3.表中记录的无序性4.集合的"序"和物理存储顺序之间的关系5.查询结果(虚拟表)的无序性.随机性6.为什么总是强调"无序&quo ...

  9. JAVA_SE基础——28.封装

    黑马程序员blog... 面向对象三大特征:1. 封装2. 继承3  多态. 今天我们先学习第一大特征,封装. 封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式. 好处:     1. 将变 ...

  10. .NET Core/.NET之Stream简介

    之前写了一篇C#装饰模式的文章提到了.NET Core的Stream, 所以这里尽量把Stream介绍全点. (都是书上的内容) .NET Core/.NET的Streams 首先需要知道, Syst ...