C#排序算法之快速排序

时间:2021-05-24 02:44:17 

快速排序实现:


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, end);
DoSort(array, start, temp-1);
DoSort(array, temp + 1, end);
}
}
private static int Partition(int[] array,int start, int end)
{
int index = start - 1;
for( var i=start; i< end; i++)
{
if( array[i] < array[end])
{
index++;
Swap(array, index, i);
}
}
Swap(array, index +1, end);
return index + 1;
}
private static void Swap(int[] array, int index1, int index2)
{
var temp = array[index1];
array[index1] = array[index2];
array[index2] = temp;
}
}
}


以上即为快速排序的代码,这里有两个重要的方法:
1、Partition:该方法是以数组的某个元素为参考元素(轴元素或主元素),将数组划分成三个区域:
【<=参考元素】【参考元素】【>=参考元素】
2. DoSort:该方法会调用Partition将数组分区,并在新产生的子数组上递归调用最终达到有序的目的。
上面给出的代码是以数组最后一个元素作为参考元素,这仅是参考元素选取的方式之一。我们也可以随即选取数组的元素或者数组中间的元素作为参考元素。事实上参考元素的选取对快速排序的性能有很大影响。如果每次选取的参考元素能将数组分成相对均衡的区域,快速排序将成为最快的排序算法;但在另一种极端情形下,每次分成的数组都是1和n-1的关系,快速排序又会变的很慢。具体的性能数据后面再来讨论研究。

标签:快速排序
0
投稿

猜你喜欢

  • Logback 使用TurboFilter实现日志级别等内容的动态修改操作

    2022-06-10 04:17:53
  • 多线程如何解决for循环效率的问题

    2023-12-02 08:31:55
  • Android如何判断一个点在不在多边形区域内

    2023-07-06 14:06:13
  • ActiveMQ安装及部署教程图解

    2023-11-17 18:01:46
  • java web实现邮箱激活与忘记密码

    2023-11-18 09:35:26
  • C#调用Java类的实现方法

    2022-10-30 11:00:10
  • 解决Spring国际化文案占位符失效问题的方法

    2022-10-20 23:42:23
  • Spring Cloud中FeignClient实现文件上传功能

    2023-06-23 07:57:09
  • Java中final变量使用总结

    2022-09-29 08:32:00
  • Java 回调callback举例详解

    2023-11-11 16:25:09
  • Java深入了解数据结构之二叉搜索树增 插 删 创详解

    2023-02-14 08:08:00
  • Java ArrayList深入源码层分析

    2021-10-18 04:12:31
  • SpringMVC 传日期参数到后台的实例讲解

    2022-01-18 23:31:48
  • 从try-with-resources到ThreadLocal,优化你的代码编写方式

    2023-11-11 03:19:52
  • Java输出链表倒数第k个节点

    2023-03-22 01:22:34
  • Spring自定义参数解析器代码实例

    2023-07-02 15:08:06
  • Spring如何使用注解的方式创建bean

    2022-01-29 03:45:49
  • SpringMVC执行过程详细讲解

    2023-06-07 10:04:54
  • 计算字符串和文件MD5值的小例子

    2023-12-10 20:31:19
  • Java中集合和数组的排序方式小结

    2023-08-25 00:52:10
  • asp之家 软件编程 m.aspxhome.com