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
投稿

猜你喜欢

  • java 解决Eclipse挂掉问题的方法

    2023-02-19 14:05:55
  • Android数据库中事务操作方法之银行转账示例

    2023-07-22 07:56:13
  • Java中五种不同方法的创建对象

    2021-07-25 01:11:37
  • Android下拉刷新以及GridView使用方法详解

    2022-12-26 18:01:24
  • C# winform 请求http的实现(get,post)

    2023-03-20 13:52:01
  • Java 超详细讲解ThreadLocal类的使用

    2021-11-13 05:58:29
  • Android开发之SQLite的使用方法

    2022-11-12 05:26:38
  • Java中的多态用法实例分析

    2021-07-11 18:36:35
  • SpringBoot实现过滤器和拦截器的方法

    2022-10-21 23:29:34
  • C#算法之回文数

    2022-06-26 20:02:38
  • C#获取U盘序列号的方法

    2023-09-15 02:09:54
  • WPF如何利用附加属性修改ShowGridLines效果详解

    2023-04-01 06:32:04
  • 浅谈Java常见的排序算法

    2023-09-08 11:11:11
  • Spring Boot 2.0.0 终于正式发布-重大修订版本

    2021-08-12 08:25:51
  • C#使用iTextSharp从PDF文档获取内容的方法

    2021-06-12 04:01:11
  • 在Parallel中使用DbSet.Add()发现的一系列多线程问题和解决思路详解

    2023-02-13 19:31:10
  • Spring bean对象实例化实现过程图解

    2023-01-02 07:32:13
  • Compose 的 Navigation组件使用示例详解

    2023-02-12 12:43:43
  • C# 正则判断一个数字的格式是否有逗号的代码

    2021-09-13 07:42:12
  • Android中的windowSoftInputMode属性详解

    2022-11-14 06:17:40
  • asp之家 软件编程 m.aspxhome.com