C#排序算法——快速排序法
来源:互联网 发布:我的网络研修计划 编辑:程序博客网 时间:2024/06/06 18:38
在阅读此博文前,请先阅读我的博文“C#排序算法——基类设计“,以了解基类的结构。
在编写代码前,我们先来了解二路归并法的排序过程:
假设有一个IList<T>型的集合list(集合的元素为list[0]到list[n-1], n = list.Count)。
第1步:从a[0 : n - 1]中选择一个元素作为middle,该元素为支点。
第2步:把余下的元素分割为两段left和right,使得left中的元素都小于等于支点,而right中的元素都大于等于支点。
第3步,递归地使用快速排序方法对left 进行排序。
第4步,递归地使用快速排序方法对right 进行排序。
很显然,快速排序法同样使用了递归调用。根据上面的算法,我们开始编码了:
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace CYB.DataStruct.Sorting
- {
- /// <summary>
- /// 作者 : cyb
- /// 发表时间 : 2008-9-13
- /// qq : 13101908
- /// e-mail : hustcyb@gmail.com
- /// </summary>
- public class QuickSorter : Sorter
- {
- public override void Sort<T>(IList<T> list, CompareDelegate<T> compare)
- {
- base.Sort(list, compare);
- QuickSort(list, 0, list.Count - 1, compare);
- }
- /// <param name="left">子集的起始索引号</param>
- /// <param name="right">子集的终止索引号</param>
- private void QuickSort<T>(IList<T> list, int left, int right, CompareDelegate<T> compare)
- {
- if (left >= right)
- {
- return; //子集元素个数小于1,直接返回
- }
- int l = left + 1; //从左往右扫描的游标
- int r = right; //从右往左扫描的游标
- T pivot = list[left]; //选择最左端元素作为支点
- while (true)
- {
- //从左往右扫描找出所有小于支点的元素
- while (l < right && compare(list[l], pivot) <= 0)
- {
- ++l;
- }
- //从右往左扫描找出所有大于支占的元素
- while (compare(list[r], pivot) > 0)
- {
- --r;
- }
- if (l >= r)
- {
- break;
- }
- else
- {
- SwapListItem(list, l, r); //交换左右游标的元素
- }
- }
- //将支点移到中间
- list[left] = list[r];
- list[r] = pivot;
- //递归地使用快速排序法对由支点作为边界的左右子集进行排序
- QuickSort(list, left, r - 1, compare);
- QuickSort(list, r + 1, right, compare);
- }
- }
- }
- C#排序算法——快速排序法
- 排序算法—快速排序
- 排序算法—快速排序
- C#算法 快速排序
- 快速排序算法c#
- C#快速排序算法
- C#快速排序算法
- 排序算法———快速排序
- 排序算法(一)——快速排序
- 排序算法——快速排序
- 排序算法——快速排序
- 经典排序算法——快速排序
- 排序算法——快速排序
- 经典排序算法——快速排序
- 经典排序算法——快速排序
- 排序算法5——快速排序
- 排序算法——快速排序
- 排序算法——快速排序
- 代码行统计工具V2.5
- 一场开源的盛宴--OSCON 2008记行
- sqlserver数据库分页问题
- C++编译器的比较收藏
- 100本极品IT书下载
- C#排序算法——快速排序法
- (转)英特尔迅驰移动计算技术
- 重学Windows(二):得到Windows的版本及平台:Win32(x86), Win64 (x64)还是Win64(IA64)
- 孙鑫VC视频教程笔记之第四课“MFC消息映射机制和CDC类”
- 《THE C PROGRAMMING LANGUAGE》读书笔记一
- hashtable-1-c
- dom解析xml_1
- 少男杀手dodolook签约酷6网原创红人阵营
- retrieve Xml