首页 > 编程语言 >QuickSort之C#实现

QuickSort之C#实现

时间:2024-08-07 22:50:51浏览次数:14  
标签:基准值 C# sw ifEqual QuickSort 实现 int values lIndex

 /// <summary>
 /// 快速排序中的切分
 /// lIndex已经是基准值,i记录基准值的大小值的边界,j记录目前遍历的边界;
 /// i值必须从lIndex+1开始,因为基准值已经在lIndex位置了,
 /// i位置的值必须大于基准值,因为发现比基准值小的值,需要和i位置的值交换,
 /// 交换结束后,i++,变更基准边界值;
 /// 最后,交换基准值和i-1位置的值,基准值归位,i-1位置是基准值的大小值边界,
 /// 返回i-1
 /// </summary>
 /// <param name="values"></param>
 /// <param name="lIndex"></param>
 /// <param name="rIndex"></param>
 /// <returns></returns>
 public static int Partition(int[] values,int lIndex,int rIndex)
 {
     int p = values[lIndex];
     int i = lIndex+1;
     for(int j = lIndex + 1; j <= rIndex; j++)
     {
         if (values[j] < p)
         {
             int temp = values[i];
             values[i] = values[j];
             values[j] = temp;
             i++;
         }
     }
     int tempp = values[lIndex];
     values[lIndex] = values[i - 1];
     values[i - 1] = tempp;
     return i - 1;
 }

 public static void QuickSort(int[] values,int lIndex,int rIndex)
 {
     if (lIndex >= rIndex)
     {
         return;
     }
     int index = ChoosePivot(values, lIndex, rIndex);
     int temp = values[index];
     values[index] = values[lIndex];
     values[lIndex] = temp;
     int j = Partition(values, lIndex, rIndex);
     QuickSort(values, lIndex, j - 1);
     QuickSort(values, j + 1, rIndex);
 }
 public static int ChoosePivot(int[] values,int lIndex,int rIndex)
 {
     Random rand = new Random();
     int index = rand.Next(lIndex, rIndex);
     return lIndex;
 }

int[] values = new int[100000];
Random rand = new Random();
for(int i = 0; i < values.Length; i++)
{
    values[i] = rand.Next(0, values.Length);
}
int[] valuesCopy = (int[])values.Clone();
bool ifEqual = true;
for(int i = 0; i < values.Length; i++)
{
    if(values[i] != valuesCopy[i])
    {
        ifEqual = false;
    }
}
Console.WriteLine($"排序前:ifEqual->{ifEqual}");
Stopwatch sw = new Stopwatch();
sw.Start();
AlgorithmMethod.QuickSort(values, 0, values.Length - 1);
sw.Stop();
Console.WriteLine($"QuickSort用时:{sw.ElapsedMilliseconds}ms");
sw.Restart();
var a = valuesCopy.ToList();
a.Sort();
valuesCopy = a.ToArray();
sw.Stop();
Console.WriteLine($"Order用时:{sw.ElapsedMilliseconds}ms");
ifEqual = true;
for (int i = 0; i < values.Length; i++)
{
    if (values[i] != valuesCopy[i])
    {
        ifEqual = false;
    }
}
Console.WriteLine($"排序后:ifEqual->{ifEqual}");
排序前:ifEqual->True
QuickSort用时:46ms
Order用时:5ms
排序后:ifEqual->True

标签:基准值,C#,sw,ifEqual,QuickSort,实现,int,values,lIndex
From: https://www.cnblogs.com/johnyang/p/18348009

相关文章

  • 034.CI4框架CodeIgniter,纯净windows系统,一步步安装composer和CodeIgniter 4.5.4
    安装git选择路径 一路回车安装 安装phpstudy 安装好的界面 下载php8.2.9  点一下默认配置,确定 php版本要选择php8.2.9 需要安装的php扩展如下 点开网站的管理,设置一个根目录 php,启动 在根目录创建一个index.html的文件,用浏览器打开,看看能不能访......
  • 在Gradle8中使用阿里云maven仓库、jitpack仓库
    编辑settings.gradlepluginManagement{repositories{google{content{includeGroupByRegex("com\\.android.*")includeGroupByRegex("com\\.google.*")includeGroupByRe......
  • Xcode16升级后,如何直接安装iOS 18 Simulator
    热烈欢迎,请直接点击!!!进入博主AppStore主页,下载使用各个作品!!!注:博主将坚持每月上线一个新app!! 苹果官方下载链接:【操作系统OperatingSystems】:https://developer.apple.com/download/【应用Applications】:https://developer.apple.com/download/applications/【描述文件Pr......
  • spring 代码执⾏ (CVE-2018-1273)漏洞
    一漏洞简介SpringData是⼀个⽤于简化数据库访问,并⽀持云服务的开源框架,SpringDataCommons是SpringData下所有⼦项⽬共享的基础框架。SpringDataCommons在2.0.5及以前版本中,存在⼀处SpEL表达式注⼊漏洞,攻击者可以注⼊恶意SpEL表达式以执⾏任意命令    ......
  • 【创新、复现】基于蜣螂优化算法的无线传感器网络覆盖优化研究(Matlab代码实现)
    ......
  • Spring Data Rest 远程命令执⾏命令(CVE-2017-8046)
    简介:Spring是JavaEE编程领域的⼀个轻量级开源框架,该框架由⼀个叫RodJohnson的程序员在2002年最早提出并随后创建,是为了解决企业级编程开发中的复杂性,业务逻辑层和其他各层的松耦合问题,因此它将⾯向接⼝的编程思想贯穿整个系统应⽤,实现敏捷开发的应⽤型框架。框架的主要优......
  • 【c++】Linux MySQL连接池
    #ifndefMYSQLCONNECTION_H#defineMYSQLCONNECTION_H#include<iostream>#include<mysql.h>#include<vector>classMySQLConnection{public: ///<summary> ///初始化连接 ///</summary> MySQLConnection(); MySQLConnection(MySQ......
  • clone方法
    /*Object类中的clone方法不是任何一个类都可以调用clone方法的,如果此对象的类不实现接口Cloneable,则抛出CloneNotSupportedException只有实现了Cloneable接口的类创建出来的对象,才可以调用clone方法我们观察Cloneable接口文档发现,这个接口源码什么都没有,像这......
  • 网站源码医疗机构pbootcms模板网页设计主题
    医疗机构的网站设计分享我很高兴向大家介绍我刚刚制作的医疗机构的网站设计。友好的站点界面,是打动访客的第一步。医疗机构网站的主题网站设计需要充分考虑到医疗行业的特殊性和用户需求,以下是一个清晰的设计介绍:1.设计原则用户友好性:网站的设计和功能应便于用户理解和使......
  • 嵌入式初学-C语言-十七
    #接嵌入式初学-C语言-十六#函数的递归调用含义:在一个函数中直接或者间接调用了函数本身,称之为函数的递归调用//直接调用a()->a();//间接调用a()->b()->a();a()->b()->..->a();递归调用的本质:本是是一种循环结构,它不同于之前所学的while,do-while,for这......