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] = tempObj; } private int CmpInt(object Left, object Right) { if ((int) Left < (int) Right) return -1; else return -2; } public QuickSort(object[] Array) { CmpOp Cmp = new CmpOp(CmpInt); Sort(Array, 0, Array.Length-1, Cmp); } private void Sort(object[] Array, int Left, int Right, CmpOp Cmp) { int LHold = Left; int RHold = Right; Random ObjRan = new Random(); int Pivot = ObjRan.Next(Left,Right); swap(Array, Pivot, Left, Cmp); Pivot = Left; Left++; while (Right >= Left) { if (Cmp(Array[Left], Array[Pivot])!= -1 && Cmp(Array[Right], ArrObj[Pivot])== -1) swap(Array, Left, Right, Cmp); else if (Cmp(Array[Left], Array[Pivot]) != -1) Right--; else if (Cmp(Array[Right],Array[Pivot]) == -1) Left++; else { Right--; Left++; } } swap(Array, Pivot, Right, Cmp); Pivot = Right; if (Pivot > LHold) Sort(Array, LHold, Pivot, Cmp); if (RHold > Pivot+1) Sort(Array, Pivot+1,RHold, Cmp); } }
希望本文所述对大家的C#程序设计有所帮助。
相关推荐
-
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.可根据集合中的对象的各个属性进行排序,传入属性名称即可: 注:属性必须实现了IComparable接口,C#中int.datetime.string等基本类型都已经实现了IComparable接口. 复制代码 代码如下: /// <summary> /// 对集合进行排序,如 /// List<User> users=new List<User>(){.......} /// ListSorter.SortList&l
-
逐步讲解快速排序算法及C#版的实现示例
算法思想 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序.它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod). 该方法的基本思想是: 1.先从数列中取出一个数作为基准数. 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边. 3.再对左右区间重复第二步,直到各区间只有一个数. 虽然快速排序称为分治法,但分治法这三个字显然无法很好的概括快速排序的全部步骤.因此我的对快速排序作了进一步的说明:挖坑填数+分治法:
-
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# 快速排序算法
快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists). 步骤为: 1.从数列中挑出一个元素,称为 "基准"(pivot), 2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边).在这个分区退出之后,该基准就处于数列的中间位置.这个称为分区(partition)操作. 3.递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序. 递归
-
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#使用委托实现的快速排序算法.分享给大家供大家参考.具体如下: 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
-
Python快速排序算法实例分析
本文实例讲述了Python快速排序算法.分享给大家供大家参考,具体如下: 快速排序的时间复杂度是O(NlogN) 算法描述: ① 先从序列中取出一个数作为基准数 ② 分区过程, 将比这个数大的数全部放到它的右边, 小于或等于它的数全部放到它的左边 ③ 再对左右区间重复第二步, 直到各区间只有一个数 假设对 6, 1, 2, 7, 9, 3, 4, 5, 10, 8 进行排序, 首先在这个序列中随便找一个基准数(用来参照), 比如选择 6 为基准数, 接下来把所有比基准数大的数放在6的右边, 比6
-
PHP快速排序算法实例分析
本文实例讲述了PHP快速排序算法.分享给大家供大家参考,具体如下: 快速排序:在无序的数组$data中,选择任意一个值作为对比值,定义i为头部检索索引,j为尾部检索索引, 算法步骤: (1)初始化对比值$value=$data[0],$i=1,$j=count($data)-1 (2)首先从尾部开始检索,判断$data[$j]是否小于$value,若不小于则$j--,继续检索,直到找到比$value小的坐标 (3)这时开始头部检索,判断$data[$i]是否大于$value,若不大于则$i++,
-
C语言实现快速排序算法实例
首先我们要对一组数据进行排序: 在数组中选一个基准数(通常为数组第一个,黄圈圈标记了): 将数组中小于基准数的数据移到基准数左边,大于基准数的移到右边,怎么移动,后面说: 对于基准数左.右两边的数组,不断重复以上两个过程,直到每个子集只有一个元素,即为全部有序. 好了,咱们开始吧! 快速排序需要两个哨兵,i 和 j,分别指向数组的头和尾.接下来就要进行移动. 我们通常选择第一个元素作为基准数,去移动数组元素,使其达到这个基准数的左边都是小于它的,右边都是大于它的.开始移动 i 和 j , i 和
-
PHP两种快速排序算法实例
虽然在PHP这样的web应用开发中,我们不是太强调排序的重要性,因为PHP自身已经带了例如sort()等这样强大的排序函数,但是在一些重要的场合,例如某些高并发的场合,我想排序算法的影响已经不能忽略.所以在此介绍递归排序和迭代排序. 递归法: /** * 递归法实现的快速排序 */ function quicksort($seq) { $k = $seq[0]; $x = array(); $y = array(); for($i=1; $i< $_size; $i++) { if($seq[$
-
JavaScript算法系列之快速排序(Quicksort)算法实例详解
"快速排序"的思想很简单,整个排序过程只需要三步: (1)在数据集之中,选择一个元素作为"基准"(pivot). (2)所有小于"基准"的元素,都移到"基准"的左边:所有大于"基准"的元素,都移到"基准"的右边. (3)对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止. 举例来说,现在有一个数据集{85, 24, 63, 45,
-
C语言中使用快速排序算法对元素排序的实例详解
调用C语言的快速排序算法qsort(); #include<stdio.h> #include<stdlib.h> #include<string.h> #define SIZE 100 //从小到大排序 int comp1(const void *x,const void *y) { return *(int *)x - *(int *)y; } //从大到小排序 int comp2(const void *x,const void *y) { return *(in
-
C/C++实现快速排序算法的两种方式实例
目录 介绍 流程如下 实现 方式一 方式二 总结 介绍 快速排序是对冒泡排序算法的一种改进,快速排序算法通过多次比较和交换来实现排序. 流程如下 (图片来自百度) 实现 以下有两种实现方式,说是两种,其实就是在交换元素时具体细节上有点不同罢了. 方式一 int Partition(int A[],int low,int high){ int pivot=A[low];//第一个元素作为基准 while(low<high){ while(low<high && A[high]&g
-
C C++ 算法实例大全
C C++,算法实例 一.数论算法 1.求两数的最大公约数 function gcd(a,b:integer):integer; begin if b=0 then gcd:=a else gcd:=gcd (b,a mod b); end ; 2.求两数的最小公倍数 function lcm(a,b:integer):integer; begin if a<b then swap(a,b); lcm:=a; while lcm mod b>0 do inc(lcm,a); end; 3.
随机推荐
- SQL2005学习笔记 APPLY 运算符
- MySQL中日期和时间戳互相转换的函数和方法
- 深入浅析Oracle数据库管理之创建和删除数据库
- 利用Python脚本在Nginx和uwsgi上部署MoinMoin的教程
- 原生JS实现图片轮播切换效果
- C#实现过滤html标签并保留a标签的方法
- PHP下获取上个月、下个月、本月的日期(strtotime,date)
- MySQL压测工具mysqlslap的介绍与使用
- Mysql 5.7.19 免安装版配置方法教程详解(64位)
- py2exe 编译ico图标的代码
- javascript获取网页中指定节点的父节点、子节点的方法小结
- 详解Mysql中的视图
- JQuery EasyUI 数字格式化处理示例
- Fixie.js 自动填充内容的插件
- js静态方法与实例方法分析
- 巧用NTFS权限屏蔽FlashGet弹出广告
- VSFTP 两招帮你提高FTP服务器的安全性
- Java 泛型总结(一):基本用法与类型擦除
- 分析Android App中内置换肤功能的实现方式
- Python简直是万能的,这5大主要用途你一定要知道!(推荐)