在众多的排序算法中,快速排序由于有较好的性能(时间复杂度O(NlogN),优于常见的排序算法),且算法编码难度较小,常在工程实践和招聘中使用或考察。这里手撸并上传了一个快速排序算法的C#实现。主要参考了Wiki 百科的“快速排序”,以及严蔚敏老师《数据结构》一书对快速排序的讲解。源码如下:

static void Main(string[] args)
{int[] numbers = { 8, 3, 2, 4, 7, 6, 5 };// 输出未排序数组for (int i = 0; i < numbers.Length; i++){Console.Write(numbers[i] + " ");}// 对该数组进行排序QuickSort(numbers, 0, numbers.Length - 1);// 输出已排序数组Console.Write("\n--------------------------\n");for (int i = 0; i < numbers.Length; i++){Console.Write(numbers[i] + " ");}
}static void QuickSort(int[] numbers, int start, int end)
{if (numbers == null || numbers.Length <= 0){return;}if (start < 0 || end < 0 || start >= end){return;}int pivort = start;int mid = Partition(numbers, start, end, pivort);// mid 已经定位QuickSort(numbers, start, mid - 1);QuickSort(numbers, mid + 1, end);
}static int Partition(int[] numbers, int start, int end, int pivort)
{int pivortValue = numbers[pivort];// 置换在数组中位置Swap(numbers, end, pivort);int storeIndex = start;// 执行分割操作for (int i = start; i <= end - 1; i++){if (numbers[i] < pivortValue){Swap(numbers, i, storeIndex);storeIndex++;}}Swap(numbers, storeIndex, end);return storeIndex;
}static void Swap(int[] array, int indexX, int indexY)
{int temp = array[indexX];array[indexX] = array[indexY];array[indexY] = temp;
}

更多快速排序学习可参考 https://blog.csdn.net/wangxufa/article/details/121732098

快速排序(C#)实现相关推荐

  1. Golang TDD实践报告:快速排序Quick Sort

    Golang TDD实践报告:快速排序Quick Sort [阅读时间:约5分钟] 0.项目需求 1.编写符合项目输入输出的一个测试 2.尝试运行测试 3.先使用最少的代码来让失败的测试先跑起来 4. ...

  2. 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/

    大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...

  3. 数据结构学习(十三)、快速排序

    基本思想:通过一趟排序将待排记录分割成独立两个部分,其中一部分记录的关键字均比另一部分记录的关键字小, 则可分别对这两部分继续进行排序,重复操作以上操作,已达到整个序列有序的目的 void Quick ...

  4. 快速排序(快排)--->注释超详细

    基本思想:         1.先选取一个基准值(一般选取数组第一个元素).         2.以第一步选取的基准值为标准,然后从最后一个数值开始一步步向前走将数字与基准值进行比较,如果该值大于基准 ...

  5. 快速排序的两种实现方法(c语言版本)

    经过调研发现,对任意无序整数数组,快速排序有两种实现方法,这里简单阐述下思路: 思路一:随意选择一个基准元,一般选择数组的起始元或末尾元,Weiss这本书上特意搞了个算法来选择基准元,--,总之就是基 ...

  6. 【经典算法】快速排序

    与归并排序一样,快速排序使用也使用了分治的思想.下面是对一个典型的子数组A[p,...,r]进行快速排序的三步分治过程: 分解:数组A[p,...,r]被划分成两个(可能为空)子数组A[P,...,q ...

  7. 20140725 快速排序时间复杂度 sTL入门

    1.快速排序的时间复杂度(平均时间复杂度为) 数组本身就有序时,效果很差为O(n^2) 2.STl入门 (1) C++内联函数(inline)和C中宏(#define)区别 内联函数有类型检查,宏定义 ...

  8. java 快排_八大排序-快速排序(搞定面试之手写快排)

    概要 快速排序由C. A. R. Hoare在1960年提出,是八大排序算法中最常用的经典排序算法之一.其广泛应用的主要原因是高效,核心算法思想是分而治之.快速排序经常会被作为面试题进行考察,通常的考 ...

  9. 排序学习之---快速排序

    一.前言 快速排序是一种交换排序,它由C. A. R. Hoare在1962年提出. 二.算法思想 快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分:分割点左边都是比它小的数,右边都 ...

  10. java 冒泡排序和快速排序 实现

    面试的时候经常会遇到面试官让你直接手写排序算法,下面是冒泡排序和快速排序的实现. 冒泡排序 基本流程就是,自下而上比较相邻的两个元素进行比较,让大的元素往下面沉,较小的往上冒.按照排序规则进行比较,如 ...

最新文章

  1. 汇编语言中带点/小数点的是什么
  2. Java值类型与引用类型的不同
  3. xlrd.biffh.XLRDError: Excel xlsx file; not supported报错
  4. 你犯了没?电脑最忌讳的18个小动作之三
  5. 转载:div和flash层级关系问题
  6. Oracle入门(七)之表空间
  7. hibernate 批量更新_360产品动态,10月份平台都有哪些更新?
  8. redis windows安装
  9. 函数的动态参数和作用域
  10. mac gcc安装_16_超级小白Mac Pro下安装superset遇见的坑
  11. 灰度世界算法(Gray World Algorithm)
  12. Java8 实战系列-04-lambda 内置函数
  13. 大数据专业认知实习作业
  14. Android聊天软件开发(基于网易云IM即时通讯)——添加好友(三)
  15. VR全景营销实质体验店铺的实际情况
  16. phpstudy php56 zend,关于shopex 4.9 php5.6版安装环境问题
  17. 解决Mybatis报错并分析原因:Invalid bound statement (not found): com.xxx.mapper.xxx
  18. 《如何正确评估自己的工作能力》--马薇薇
  19. 程序包com.wonhyoo.common.entity不存在, 找不到符号
  20. java读取otf_在webpack中加载.otf字体文件的正确方法是什么?

热门文章

  1. kaggle:Costa Rican Household Poverty Level Prediction(1)DEA
  2. Docker MySQL 8 慢查询日志监控详解
  3. 数据操作(基于MXNET框架)
  4. 363.矩形区域不超过K的最大数值和
  5. python转义字符表
  6. 2020 金山云 面经
  7. vector容器易错知识点集锦
  8. 计算机图形学完整笔记(八):曲线曲面 - 2
  9. 频域卷积定理的证明 乘积的傅里叶变换等于分别做傅里叶变换的卷积乘1/2pi
  10. Raki的读paper小记:WaveTransformer: A Novel Architecture for Audio Captioning