快速排序

1. 快速排序思想

2. 实现代码

3. 代码下载


1. 快速排序思想

快速排序主要是基于下面的事实:对于数组A,首先对其进行分割成两部分,前面一部分的值是小于所选定的主元(pivot),后面一部分是大于主元的,然后通过递归调用排序刚刚分割的两部分,即实现对与整个数组的排序。 

伪代码如下:

 

 

2. 实现代码

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Alice.Sort
{
    
public class QuickSort
    {

        
// 实现快速排序[start, end]
        public static void Sort(ref int[] arr, int start, int end)
        {
            
// 循环结束条件
            if (start >= end)
                
return;

            
// 开始递归
            int i = Partition(ref arr, start, end);
            Sort(
ref arr, start, (i - 1));
            Sort(
ref arr, (i + 1), end);
        }   

        
// 将[start,end]数组分割
        public static int Partition(ref int[] arr, int start, int end)
        {
            
// 选择主元,这里总是选择最后一个元素作为主元,或者这里
            
// 通过随机数随机选择主元
            int pivot = arr[end];
            
int i = start - 1;  // 游标i之前(<=i)应该全是小于pivot的元素
            int tmp;

            
for (int j = start; j <= end - 1++j )
            {
                
// 升序排列
                if (arr[j] < pivot)
                {
                    
++i;
                    
// 交换两个元素arr[i]和arr[j]
                    tmp = arr[i];
                    arr[i] 
= arr[j];
                    arr[j] 
= tmp;
                }
            }
            
// 将pivot(arr[end])的元素放置在(i + 1)的位置
            tmp = arr[end];
            arr[end] 
= arr[i + 1];
            arr[i 
+ 1= tmp;

            
return (i + 1);
        }


    }

}  

复制代码

3. 代码下载 

/Files/xuqiang/QuickSort.rar 

posted @   qiang.xu  阅读(396)  评论(2编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示