C# 内部的快速排序实现


 1 private void QuickSort(int[] map, int left, int right)
2 {
3 do
4 {
5 int index = left;
6 int num2 = right;
7 int num3 = map[index + ((num2 - index) >> 1)];
8 do
9 {
10 while ((index < map.Length) && (this.CompareKeys(num3, map[index]) > 0))
11 {
12 index++;
13 }
14 while ((num2 >= 0) && (this.CompareKeys(num3, map[num2]) < 0))
15 {
16 num2--;
17 }
18 if (index > num2)
19 {
20 break;
21 }
22 if (index < num2)
23 {
24 int num4 = map[index];
25 map[index] = map[num2];
26 map[num2] = num4;
27 }
28 index++;
29 num2--;
30 }
31 while (index <= num2);
32 if ((num2 - left) <= (right - index))
33 {
34 if (left < num2)
35 {
36 this.QuickSort(map, left, num2);
37 }
38 left = index;
39 }
40 else
41 {
42 if (index < right)
43 {
44 this.QuickSort(map, index, right);
45 }
46 right = num2;
47 }
48 }
49 while (left < right);
50 }

其中CompareKeys需要自己实现,也叫比较器,C#内部很多地方都要用到

时间: 2024-10-21 21:54:07

C# 内部的快速排序实现的相关文章

浅谈算法和数据结构: 四 快速排序

原文:浅谈算法和数据结构: 四 快速排序 上篇文章介绍了时间复杂度为O(nlgn)的合并排序,本篇文章介绍时间复杂度同样为O(nlgn)但是排序速度比合并排序更快的快速排序(Quick Sort). 快速排序是20世纪科技领域的十大算法之一 ,他由C. A. R. Hoare于1960年提出的一种划分交换排序. 快速排序也是一种采用分治法解决问题的一个典型应用.在很多编程语言中,对数组,列表进行的非稳定排序在内部实现中都使用的是快速排序.而且快速排序在面试中经常会遇到. 本文首先介绍快速排序的思

10-7-快速排序-内部排序-第10章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分 第10章  内部排序 - 快速排序 ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑        本源码引入的文件  链接? SequenceListType.c        相关测试数据下载  链接?

快速排序(转)

上篇文章介绍了时间复杂度为O(nlgn)的合并排序,本篇文章介绍时间复杂度同样为O(nlgn)但是排序速度比合并排序更快的快速排序(Quick Sort). 快速排序是20世纪科技领域的十大算法之一 ,他由C. A. R. Hoare于1960年提出的一种划分交换排序. 快速排序也是一种采用分治法解决问题的一个典型应用.在很多编程语言中,对数组,列表进行的非稳定排序在内部实现中都使用的是快速排序.而且快速排序在面试中经常会遇到. 本文首先介绍快速排序的思路,算法的实现.分析.优化及改进,最后分析

你不知道的JavaScript--Item30 数组进阶全掌握

在程序语言中数组的重要性不言而喻,JavaScript中数组也是最常使用的对象之一,数组是值的有序集合,由于弱类型的原因,JavaScript中数组十分灵活.强大,不像是Java等强类型高级语言数组只能存放同一类型或其子类型元素,JavaScript在同一个数组中可以存放多种类型的元素,而且是长度也是可以动态调整的,可以随着数据增加或减少自动对数组长度做更改. 1.创建数组 在JavaScript多种方式创建数组 1.构造函数 1.无参构造函数,创建一空数组 var a1=new Array()

数组Array及其工具类的使用

一.一维数组 (一)初始化 1.静态初始化:给出初始值,系统决定长度 <span style="font-family:Arial;font-size:18px;">int[] sArr = {1,2,3}; String[] sArrStr = {"a","b","c"};</span> 2.动态初始化:只指定长度,系统给出初始值 <span style="font-family:Ar

c语言排序算法

用C语言总结一下常用排序算法,虽然大多数语言里已经提供了排序算法,比如C函数库中提供了qsort排序函数(内部为快速排序实现),但理解排序算法的思想的意义远远超过了实用的价值.这里我总结了常用的排序算法,并用C语言实现.这些算法的书写顺序也有一定的关联,比如希尔排序是对插入算法的改进,快速排序是对冒泡排序的改进,快速排序和归并排序都用递归实现.注:每种方法的实现尽量提供了相同的形参列表.这里并没用涉及堆排序,箱排序等算法的实现. 插入排序算法概要:插入排序依据遍历到第N个元素的时候前面的N-1个

JavaScript初探系列之数组的基本操作

在程序语言中数组的重要性不言而喻,JavaScript中数组也是最常使用的对象之一,数组是值的有序集合,由于弱类型的原因,JavaScript中数组十分灵活.强大,不像是Java等强类型高级语言数组只能存放同一类型或其子类型元素,JavaScript在同一个数组中可以存放多种类型的元素,而且是长度也是可以动态调整的,可以随着数据增加或减少自动对数组长度做更改. 一.创建数组 在JavaScript多种方式创建数组 (一)构造函数 1.无参构造函数,创建一空数组 var a1=new Array(

JavaScript学习--Item30 数组进阶全掌握

在程序语言中数组的重要性不言而喻,JavaScript中数组也是最常使用的对象之一,数组是值的有序集合,由于弱类型的原因,JavaScript中数组十分灵活.强大,不像是Java等强类型高级语言数组只能存放同一类型或其子类型元素,JavaScript在同一个数组中可以存放多种类型的元素,而且是长度也是可以动态调整的,可以随着数据增加或减少自动对数组长度做更改. 1.创建数组 在JavaScript多种方式创建数组 1.构造函数 1.无参构造函数,创建一空数组 var a1=new Array()

STL算法小结

变动性算法---------------------------------------------------------名称             效果 for_each        针对每个元素执行某项操作copy            从第一个元素开始,复制某段区间copy_backward   从最后一个元素开始,复制某段区间transform       变动(并复制)元素,将两个区间的元素合并merge           合并两区间内的元素swap_ranges     交换