c#-快速排序-算法

简介:

快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。

步骤为:

1.从数列中挑出一个元素,称为 "基准"(pivot),

2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。

3.递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。
 

平均时间复杂度 \Theta(n\log n)

 

 快速排序通常明显比其他Ο(n log n) 算法更快

快速排序

public  static  void  Sort( int [] numbers)
{
     QuickSort(numbers, 0, numbers.Length - 1);
}
private  static  void  QuickSort( int [] numbers, int  left, int  right)
{
     if  (left < right)
     {
         int  middle = numbers[(left + right) / 2];
         int  i = left - 1;
         int  j = right + 1;
         while  ( true )
         {
             while  (numbers[++i] < middle) ;
 
             while  (numbers[--j] > middle) ;
 
             if  (i >= j)
                 break ;
 
             Swap(numbers, i, j);
         }
 
         QuickSort(numbers, left, i - 1);
         QuickSort(numbers, j + 1, right);
     }
}
 
private  static  void  Swap( int [] numbers, int  i, int  j)
{
     int  number = numbers[i];
     numbers[i] = numbers[j];
     numbers[j] = number;
}

  

调用:

int [] y = new  int [] {4,8,2222,2,1,121,13,434,56,1111,65,7,8 };
Sort(y);
foreach  ( var  item in  y)
{
     Console.WriteLine(item);
}<br> // 1 2 4 7 8 8 13 56 65 121 434 1111 2222


    本文转自曾祥展博客园博客,原文链接:http://www.cnblogs.com/zengxiangzhan/p/3305296.html,如需转载请自行联系原作者


相关文章
|
27天前
|
存储 算法 C#
C#二叉搜索树算法
C#二叉搜索树算法
|
2月前
|
搜索推荐 算法 Java
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
该博客文章通过UML类图和Java源码示例,展示了如何使用适配器模式将QuickSort类和BinarySearch类的排序和查找功能适配到DataOperation接口中,实现算法的解耦和复用。
22 1
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
|
2月前
|
算法 搜索推荐
算法设计 (分治法应用实验报告)基于分治法的合并排序、快速排序、最近对问题
这篇文章是关于分治法应用的实验报告,详细介绍了如何利用分治法实现合并排序和快速排序算法,并探讨了使用分治法解决二维平面上的最近对问题的方法,包括伪代码、源代码实现及时间效率分析,并附有运行结果和小结。
|
3月前
|
算法 搜索推荐 编译器
算法高手养成记:Python快速排序的深度优化与实战案例分析
【7月更文挑战第11天】快速排序是编程基础,以O(n log n)时间复杂度和原址排序著称。其核心是“分而治之”,通过选择基准元素分割数组并递归排序两部分。优化包括:选择中位数作基准、尾递归优化、小数组用简单排序。以下是一个考虑优化的Python实现片段,展示了随机基准选择。通过实践和优化,能提升算法技能。**
51 3
|
4月前
|
搜索推荐 算法 Java
Java中的快速排序、归并排序和堆排序是常见的排序算法。
【6月更文挑战第21天】Java中的快速排序、归并排序和堆排序是常见的排序算法。快速排序采用分治,以基准元素划分数组并递归排序;归并排序同样分治,先分割再合并有序子数组;堆排序通过构建堆来排序,保持堆性质并交换堆顶元素。每种算法各有优劣:快排平均高效,最坏O(n²);归并稳定O(n log n)但需额外空间;堆排序O(n log n)且原地排序,但不稳定。
38 3
|
4月前
|
算法 搜索推荐 JavaScript
算法学习:快速排序
算法学习:快速排序
40 1
|
3月前
|
Dart 算法 JavaScript
C#数据结构与算法入门教程,值得收藏学习!
C#数据结构与算法入门教程,值得收藏学习!
|
3月前
|
机器学习/深度学习 算法 搜索推荐
一个开源且全面的C#算法实战教程
一个开源且全面的C#算法实战教程
|
3月前
|
算法 搜索推荐 C#
|
4月前
|
搜索推荐 C语言
【C/排序算法】:快速排序和归并排序的非递归实现
【C/排序算法】:快速排序和归并排序的非递归实现
24 0
下一篇
无影云桌面