C#排序算法之快速排序解析
本文实例为大家分享了C#实现快速排序的具体代码,供大家参考,具体内容如下
代码:
/// <summary> /// 排序 /// </summary> /// <param name="array">要排序的数组</param> /// <param name="low">下标开始位置,向右查找</param> /// <param name="high">下标开始位置,向左查找</param> public static void Sort(int[] array, int low, int high) { if (low >= high) return; //完成一次单元排序 int index = SortUnit(array, low, high); //递归调用,对左边部分的数组进行单元排序 Sort(array, low, index - 1); //递归调用,对右边部分的数组进行单元排序 Sort(array, index + 1, high); } /// <summary> /// 单元排序 /// </summary> /// <param name="array">要排序的数组</param> /// <param name="low">下标开始位置,向右查找</param> /// <param name="high">下标开始位置,向右查找</param> /// <returns>每次单元排序的停止下标</returns> public static int SortUnit(int[] array, int low, int high) { int key = array[low];//基准数 while (low < high) { //从high往前找小于或等于key的值 while (low < high && array[high] > key) high--; //比key小开等的放左边 array[low] = array[high]; //从low往后找大于key的值 while (low < high && array[low] <= key) low++; //比key大的放右边 array[high] = array[low]; } //结束循环时,此时low等于high,左边都小于或等于key,右边都大于key。将key放在游标当前位置。 array[low] = key; return high; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
C#使用委托实现的快速排序算法实例
本文实例讲述了C#使用委托实现的快速排序算法.分享给大家供大家参考.具体如下: class QuickSort { private delegate int CmpOp(object Left, object Right); private void swap(object[] Array, int Left, int Right, CmpOp Cmp) { object tempObj = Array[Left]; Array[Left] = Array[Right]; Array[Right
-
逐步讲解快速排序算法及C#版的实现示例
算法思想 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序.它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod). 该方法的基本思想是: 1.先从数列中取出一个数作为基准数. 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边. 3.再对左右区间重复第二步,直到各区间只有一个数. 虽然快速排序称为分治法,但分治法这三个字显然无法很好的概括快速排序的全部步骤.因此我的对快速排序作了进一步的说明:挖坑填数+分治法:
-
c#实现最简洁的快速排序(你绝对可以看懂)
前言 算法对于程序员的重要性不言而喻,今天我和大家分享算法中的一个基础算法,快速排序.作为一名程序员,相信大家都不陌生,但是要大家徒手一次性写出来,我估计还是有难度的.那么废话不多少,我先简单减少一下概念. 快速排序算法说明: 原始数组L1,从中任意选择一个基准数F(一般选择第1个),小于F的数据放在F的左边记为数组minList,大于F的数据放在F的右边记为数组maxList.那么 L1=minList+F+maxList 然后对minList和maxList再做这样的操作,直到minList
-
c# 快速排序算法
快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists). 步骤为: 1.从数列中挑出一个元素,称为 "基准"(pivot), 2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边).在这个分区退出之后,该基准就处于数列的中间位置.这个称为分区(partition)操作. 3.递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序. 递归
-
C#快速排序算法实例分析
本文实例讲述了C#快速排序算法.分享给大家供大家参考.具体实现方法如下: public static int[] QuickSort(int[] arr) { if (arr.Length <= 1) return arr; int pivot = arr.Length - 1; int[] less = GetLessThanEqualToPivot(arr, pivot); int[] greater = GetGreaterThanPivot(arr, pivot); return Con
-
C#递归算法之快速排序
上两片第归算法学习: 1)递归算法之分而治之策略 2)递归算法之归并排序 上一篇学习中介绍了了递归算法在排序中的一个应用:归并排序,在排序算法中还有一种算法用到了递归,那就是快速排序,快速排序也是一种利用了分而治之策略的算法,它由C.A.R发明,它依据中心元素的值,利用一系列递归调用将数据表划分成越来越小的子表.在每一步调用中,经过多次的交换,最终为中心元素找到最终的位置.与归并算法不同,快速排序是就地排序,而归并排序需要把元素在临时向量中拷贝,下面通过对以下向量进行排序来理解和加深快速排序算法
-
C#中使用快速排序按文件创建时间将文件排序的源码
快速排序类 using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using Sy
-
c#集合快速排序类实现代码分享
说明: 1.集合类型参数化: 2.可根据集合中的对象的各个属性进行排序,传入属性名称即可: 注:属性必须实现了IComparable接口,C#中int.datetime.string等基本类型都已经实现了IComparable接口. 复制代码 代码如下: /// <summary> /// 对集合进行排序,如 /// List<User> users=new List<User>(){.......} /// ListSorter.SortList&l
-
C#排序算法之快速排序
快速排序实现: 复制代码 代码如下: namespace QuickSort { class QuickSort { public static void Sort(int[] array) { DoSort(array,0, array.Length-1); } private static void DoSort( int[] array, int start, int end) { if( start < end) { int temp = Partition(array, start,
-
C#排序算法之快速排序解析
本文实例为大家分享了C#实现快速排序的具体代码,供大家参考,具体内容如下 代码: /// <summary> /// 排序 /// </summary> /// <param name="array">要排序的数组</param> /// <param name="low">下标开始位置,向右查找</param> /// <param name="high">下标
-
java 排序算法之快速排序
目录 简单介绍 基本思想 思路分析 代码实现 推导实现 完整实现 大数据量耗时测试 性能分析 简单介绍 快速排序(Quicksort) 是对 冒泡排序的一种改进. 基本思想 快速排序算法通过多次比较和交换来实现排序,其排序流程如下: (1)首先设定一个分界值(基准值),通过该分界值将数组分成左右两部分. (2)将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边.此时,左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值. (3)然后,左边和右边的数据可以
-
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
本文实例讲述了PHP排序算法之快速排序(Quick Sort)及其优化算法.分享给大家供大家参考,具体如下: 基本思想: 快速排序(Quicksort)是对冒泡排序的一种改进.他的基本思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行快速排序,整个排序过程可以递归进行,以达到整个序列有序的目的. 基本算法步骤: 举个栗子: 假如现在待排序记录是: 6 2 7 3 8 9 第一步.创建变量 $low 指
-
JAVA十大排序算法之快速排序详解
目录 快速排序 问题 思路 荷兰国旗问题 代码实现 时间复杂度 算法稳定性 总结 快速排序 快速排序是对冒泡排序的一种改进,也是采用分治法的一个典型的应用.JDK中Arrays的sort()方法,具体的排序细节就是使用快速排序实现的. 从数组中任意选取一个数据(比如数组的第一个数或最后一个数)作为关键数据,我们称为基准数(pivot,或中轴数),然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序,也称为分区(partition)操作. 问题 若给定一个无序数组
-
php排序算法(冒泡排序,快速排序)
冒泡排序实现原理 ① 首先将所有待排序的数字放入工作列表中.② 从列表的第一个数字到倒数第二个数字,逐个检查:若某一位上的数字大于他的下一位,则将它与它的下一位交换. ③ 重复步骤②,直至再也不能交换. 代码实现 复制代码 代码如下: <?php function bubbingSort(array $array) { for($i=0, $len=count($array)-1; $i<$len; ++$i) { for($j=$len; $j>$i;
-
图解Java排序算法之快速排序的三数取中法
目录 基本步骤 三数取中 根据枢纽值进行分割 代码实现 总结 基本步骤 三数取中 在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分.在此我们采用三数取中法,也就是取左端.中间.右端三个数,然后进行排序,将中间数作为枢纽值. 根据枢纽值进行分割 代码实现 package sortdemo; import java.util.Arrays; /** * Created by chengxiao on 2016/12/14. * 快速排序 */ public class
-
JAVA版排序算法之快速排序示例
本文实例讲述了JAVA快速排序实现方法.分享给大家供大家参考,具体如下: package com.ethan.sort.java; import java.util.Arrays; import java.util.Iterator; import java.util.LinkedList; import java.util.List; public class QuickSort { public static <E extends Comparable<? super E>>
-
PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】
本文实例讲述了PHP四种排序算法实现及效率分析.分享给大家供大家参考,具体如下: PHP的四种基本排序算法为:冒泡排序.插入排序.选择排序和快速排序. 下面是我整理出来的算法代码: 1. 冒泡排序: 思路:对数组进行多轮冒泡,每一轮对数组中的元素两两比较,调整位置,冒出一个最大的数来. //简单版: function bubbleSort($arr) { $n = count($arr); for($i=1;$i<$n;$i++) { //冒泡的轮数(最多$n-1轮) for($j=0;$j<
-
PHP排序算法之归并排序(Merging Sort)实例详解
本文实例讲述了PHP排序算法之归并排序(Merging Sort).分享给大家供大家参考,具体如下: 基本思想: 归并排序:就是利用归并(合并)的思想实现的排序方法.它的原理是假设初始序列含有 n 个元素,则可以看成是 n 个有序的子序列,每个子序列的长度为 1,然后两两归并,得到 ⌈ n / 2⌉ (⌈ x ⌉ 表示不小于 x 的最小整数)个长度为 2 或 1 的有序序列:再两两归并,······,如此重复,直至得到一个长度为 n 的有序序列为止,这种排序方法就成为 2 路归并排序. 一.归并
随机推荐
- MySQL 5.6.14 win32安装方法(zip版)
- 常见电子书格式及其反编译思路分析第1/3页
- ruby中的双等号==问题详解
- AngularJS 避繁就简的路由
- AngularJS进行性能调优的7个建议
- Java中字符串与byte数组之间的相互转换
- 在Java下利用log4j记录日志的方法
- iOS11适配工作及导航栏影藏返回文字的解决方法
- Ionic3实现图片瀑布流布局
- js实现文本上下来回滚动
- js获取当前时间(昨天、今天、明天)
- C#实现HTML转WORD及WORD转PDF的方法
- 基于OO的动画附加插件,可以实现弹跳、渐隐等动画效果 分享
- javascript DIV跟随鼠标移动
- windows2003 IIS6配置PHP和MySql数据库
- 简单JavaScript日历及详细说明
- asp.net 使用SqlBulkCopy极速插入数据到 SQL Server
- sql2000数据库清除重复数据的二种方法
- js实现类似jquery里animate动画效果的方法
- PHP5 操作MySQL数据库基础代码