快速排序(C#)实现
在众多的排序算法中,快速排序由于有较好的性能(时间复杂度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#)实现相关推荐
- Golang TDD实践报告:快速排序Quick Sort
Golang TDD实践报告:快速排序Quick Sort [阅读时间:约5分钟] 0.项目需求 1.编写符合项目输入输出的一个测试 2.尝试运行测试 3.先使用最少的代码来让失败的测试先跑起来 4. ...
- 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/
大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...
- 数据结构学习(十三)、快速排序
基本思想:通过一趟排序将待排记录分割成独立两个部分,其中一部分记录的关键字均比另一部分记录的关键字小, 则可分别对这两部分继续进行排序,重复操作以上操作,已达到整个序列有序的目的 void Quick ...
- 快速排序(快排)--->注释超详细
基本思想: 1.先选取一个基准值(一般选取数组第一个元素). 2.以第一步选取的基准值为标准,然后从最后一个数值开始一步步向前走将数字与基准值进行比较,如果该值大于基准 ...
- 快速排序的两种实现方法(c语言版本)
经过调研发现,对任意无序整数数组,快速排序有两种实现方法,这里简单阐述下思路: 思路一:随意选择一个基准元,一般选择数组的起始元或末尾元,Weiss这本书上特意搞了个算法来选择基准元,--,总之就是基 ...
- 【经典算法】快速排序
与归并排序一样,快速排序使用也使用了分治的思想.下面是对一个典型的子数组A[p,...,r]进行快速排序的三步分治过程: 分解:数组A[p,...,r]被划分成两个(可能为空)子数组A[P,...,q ...
- 20140725 快速排序时间复杂度 sTL入门
1.快速排序的时间复杂度(平均时间复杂度为) 数组本身就有序时,效果很差为O(n^2) 2.STl入门 (1) C++内联函数(inline)和C中宏(#define)区别 内联函数有类型检查,宏定义 ...
- java 快排_八大排序-快速排序(搞定面试之手写快排)
概要 快速排序由C. A. R. Hoare在1960年提出,是八大排序算法中最常用的经典排序算法之一.其广泛应用的主要原因是高效,核心算法思想是分而治之.快速排序经常会被作为面试题进行考察,通常的考 ...
- 排序学习之---快速排序
一.前言 快速排序是一种交换排序,它由C. A. R. Hoare在1962年提出. 二.算法思想 快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分:分割点左边都是比它小的数,右边都 ...
- java 冒泡排序和快速排序 实现
面试的时候经常会遇到面试官让你直接手写排序算法,下面是冒泡排序和快速排序的实现. 冒泡排序 基本流程就是,自下而上比较相邻的两个元素进行比较,让大的元素往下面沉,较小的往上冒.按照排序规则进行比较,如 ...
最新文章
- 汇编语言中带点/小数点的是什么
- Java值类型与引用类型的不同
- xlrd.biffh.XLRDError: Excel xlsx file; not supported报错
- 你犯了没?电脑最忌讳的18个小动作之三
- 转载:div和flash层级关系问题
- Oracle入门(七)之表空间
- hibernate 批量更新_360产品动态,10月份平台都有哪些更新?
- redis windows安装
- 函数的动态参数和作用域
- mac gcc安装_16_超级小白Mac Pro下安装superset遇见的坑
- 灰度世界算法(Gray World Algorithm)
- Java8 实战系列-04-lambda 内置函数
- 大数据专业认知实习作业
- Android聊天软件开发(基于网易云IM即时通讯)——添加好友(三)
- VR全景营销实质体验店铺的实际情况
- phpstudy php56 zend,关于shopex 4.9 php5.6版安装环境问题
- 解决Mybatis报错并分析原因:Invalid bound statement (not found): com.xxx.mapper.xxx
- 《如何正确评估自己的工作能力》--马薇薇
- 程序包com.wonhyoo.common.entity不存在, 找不到符号
- java读取otf_在webpack中加载.otf字体文件的正确方法是什么?
热门文章
- kaggle:Costa Rican Household Poverty Level Prediction(1)DEA
- Docker MySQL 8 慢查询日志监控详解
- 数据操作(基于MXNET框架)
- 363.矩形区域不超过K的最大数值和
- python转义字符表
- 2020 金山云 面经
- vector容器易错知识点集锦
- 计算机图形学完整笔记(八):曲线曲面 - 2
- 频域卷积定理的证明 乘积的傅里叶变换等于分别做傅里叶变换的卷积乘1/2pi
- Raki的读paper小记:WaveTransformer: A Novel Architecture for Audio Captioning