【.NET】Array.Sort排序源码

C#中Array.Sort() 快速排序-源码分析 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。 该方法的基本思想是:     1.先从数列中取出一个数作为基准数。     2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。     3.再对左右区间重复第二步,直到各区间只有一个数 阅读详情
/*      */   public static void sort(int[] paramArrayOfInt)
/*      */   {
/*   96 */     sort1(paramArrayOfInt, 0, paramArrayOfInt.length);
/*      */   }
 
//
 
/*      */   private static void sort1(int[] paramArrayOfInt, int paramInt1, int paramInt2)
/*      */   {
/*  558 */     if (paramInt2 < 7) {
/*  559 */       for (i = paramInt1; i < paramInt2 + paramInt1; i++)
/*  560 */         for (j = i; (j > paramInt1) && (paramArrayOfInt[(j - 1)] > paramArrayOfInt[j]); j--)
/*  561 */           swap(paramArrayOfInt, j, j - 1);
/*  562 */       return;
/*      */     }
/*      */     
/*      */ 
/*  566 */     int i = paramInt1 + (paramInt2 >> 1);
/*  567 */     if (paramInt2 > 7) {
/*  568 */       j = paramInt1;
/*  569 */       k = paramInt1 + paramInt2 - 1;
/*  570 */       if (paramInt2 > 40) {
/*  571 */         m = paramInt2 / 8;
/*  572 */         j = med3(paramArrayOfInt, j, j + m, j + 2 * m);
/*  573 */         i = med3(paramArrayOfInt, i - m, i, i + m);
/*  574 */         k = med3(paramArrayOfInt, k - 2 * m, k - m, k);
/*      */       }
/*  576 */       i = med3(paramArrayOfInt, j, i, k);
/*      */     }
/*  578 */     int j = paramArrayOfInt[i];
/*      */     
/*      */ 
/*  581 */     int k = paramInt1;int m = k;int n = paramInt1 + paramInt2 - 1;int i1 = n;
/*      */     for (;;) {
/*  583 */       if ((m <= n) && (paramArrayOfInt[m] <= j)) {
/*  584 */         if (paramArrayOfInt[m] == j)
/*  585 */           swap(paramArrayOfInt, k++, m);
/*  586 */         m++;
/*      */       } else {
/*  588 */         while ((n >= m) && (paramArrayOfInt[n] >= j)) {
/*  589 */           if (paramArrayOfInt[n] == j)
/*  590 */             swap(paramArrayOfInt, n, i1--);
/*  591 */           n--;
/*      */         }
/*  593 */         if (m > n)
/*      */           break;
/*  595 */         swap(paramArrayOfInt, m++, n--);
/*      */       }
/*      */     }
/*      */     
/*  599 */     int i3 = paramInt1 + paramInt2;
/*  600 */     int i2 = Math.min(k - paramInt1, m - k);vecswap(paramArrayOfInt, paramInt1, m - i2, i2);
/*  601 */     i2 = Math.min(i1 - n, i3 - i1 - 1);vecswap(paramArrayOfInt, m, i3 - i2, i2);
/*      */     
/*      */ 
/*  604 */     if ((i2 = m - k) > 1)
/*  605 */       sort1(paramArrayOfInt, paramInt1, i2);
/*  606 */     if ((i2 = i1 - n) > 1) {
/*  607 */       sort1(paramArrayOfInt, i3 - i2, i2);
/*      */     }
/*      */   }
/*      */   
/*      */ 
/*      */   private static void swap(int[] paramArrayOfInt, int paramInt1, int paramInt2)
/*      */   {
/*  614 */     int i = paramArrayOfInt[paramInt1];
/*  615 */     paramArrayOfInt[paramInt1] = paramArrayOfInt[paramInt2];
/*  616 */     paramArrayOfInt[paramInt2] = i;
/*      */   }
[数据结构-线性表1.1] 数组 (.NET源码学习) 本文从源码的角度,对数组、数组遍历以及常见方法进行了分析与论述。更多关于数组的内容可参阅(.NETAPI浏览器|MicrosoftDocs)。对于内存分配,数组属于引用类型,其值储存在堆中,但引用的对象储存在栈中(是一个内存地址),通过该引用对象找到并访问堆中的值。对于迭代器访问,所以可使用迭代器访问的数据类型均必须可以创建或返回一个IEnumerator的对象,供迭代器使用。对于Array.Sort()方法,其内部不是单一的排序方式,而是在不同情况下使用不同的的排序方式,以达到最佳效率。... 阅读详情

相关推荐

泛型编程的核心价值与高级应用实践

泛型编程是现代编程语言中的核心特性,通过参数化类型实现代码复用和类型安全。其原理是在编译时或运行时保留类型信息,避免强制类型转换带来的风险。在工程实践中,泛型能显著提升代码质量,减少重复代码,同时通过避免装箱拆箱操作优化性能。典型应用场景包括集合操作、设计模式实现和框架开发,如在ASP.NET Core依赖注入和Entity Framework仓储模式中广泛使用。结合协变逆变等高级特性,可以构建更灵活的架构。对于Java的类型擦除和C#的运行时泛型等不同实现方式,开发者需要掌握对应的最佳实践。

weixin_34234829的博客 302

.NET 排序 Array.Sort<T> 实现分析

System.Array.Sort<T>是.NET内置的排序方法, 灵活且高效, 大家都学过一些排序算法,比如冒泡排序,插入排序,堆排序等,不过你知道这个方法背后使用了什么排...

dotNET跨平台 486

C# 冒泡排序完整版|基础 + 优化提前终止 + 5 组测试用例 + 面试详解(.NET8 原生)

纯原生无 NuGet 依赖 C# 冒泡排序实现,包含基础双层循环 + 交换标记提前终止优化;配套乱序、逆序、负数、有序 5 组全覆盖测试用例;拆解时间 / 空间复杂度、排序稳定性面试考点,完整 VS 工程可领取,适配大学数据结构作业、后端算法面试、嵌入式上位机开发。

工业上位机开发工程师,专注C#底层算法与工控仪器开发。从零手写信号滤波、曲线拟合、机器视觉、排序与密码学哈希,纯原生实现零第三方库,附数学推导与可编译源码,可移植STM32/PLC。 1310

c#范型List的Sort方法详解

  .net2005中的范型List类的Sort方法有四种形式,分别是  1,不带有任何参数的Sort方法----Sort();  2,带有比较器参数的Sort方法 ----Sort(IComparer)  3,带有比较代理方法参数的Sort方法----Sort(Comparison)>))  4,带有比较起参数,可以指定排序范围的Sort方法----Sort(Int32, Int32 IComp

FireOfStar的专栏 4万+

.Net中C#接口中Sort方法的使用

在C#中一个重要的概念接口,本资源将接口中的Sort方法的使用。

手把手教你用DLP4500和海康相机搭建双目结构光系统(附完整代码获取路径)

本文详细介绍了如何利用DLP4500投影仪和海康工业相机搭建低成本双目结构光三维测量系统。从硬件选型、软件配置到结构光编码解码实现,再到三维重建全流程,提供了完整的实战指南和优化技巧,帮助用户以不到2万元的预算实现0.05mm精度的三维扫描。

weixin_32447969的博客 316

.NET中List排序总结

对于基本类型的普通排序 直接调用Sort()方法 List&lt;int&gt; listBase = new List&lt;int&gt;() { 128, 25, 81 }; Console.WriteLine("基础类型排序前(List&lt;int&gt;):"); foreach (var item in listBase) { Console.Write($"{ite...

江浙沪柯蓝 9160

3DE重客户端安装

3DE重客户端安装

m0_48170265的博客 9425

.net 利用array.sort对结构数组进行排序

.net 中array.sort可以很方便地对yiwz数组

dizhang9的专栏 1337

模糊综合评价模型

一.引子 1.数学归纳法:同高中知识 2.秃子悖论:秃子悖论 这俩个例子都是类似于“量变引起质变”的道理,而在数学中我们把这类问题的性质叫做“模糊性”,在生活中我们也经常能遇到一些模糊的概念,比如年轻、帅、很少很多… 二.概述 模糊综合评价法是一种基于模糊数学的综合评价方法。该综合评价法根据模糊数学的隶属度理论把定性评价转化为定量评价,即用模糊数学对受到多种因素制约的事物或对象做出一个总体的评价。它具有结果清晰,系统性强的特点,能较好地解决模糊的、难以量化的问题,适合各种非确定性问题的解决。——来自百度百

The__Tyche的博客 2万+

【已解决】如何在服务器中下载huggingface模型,解决huggingface无法连接

在服务器上使用huggingface模型时,如果直接指定模型名称,用AutoTokenizer.from_pretrained(“model_name”),可能会由于网络原因会报错 Failed to connect to huggingface.co port 443 after 75018 ms: Operation time out因此我们需要下载模型到服务器上,得到模型本地的路径model_dir,再通过AutoTokenizer.from_pretrained(model_dir)方式来使用。

a61022706的博客 4万+

.NET 排序 Array.Sort<T> 实现分析

System.Array.Sort<T>是.NET内置的排序方法, 灵活且高效, 大家都学过一些排序算法,比如冒泡排序,插入排序,堆排序等,不过你知道这个方法背后使用了什么排序算法吗? 先说结果, 实际上 Array.Sort不止使用了一种排序算法, 为了保证不同的数据量的排序场景,都能有一个高性能的表现,实现中包括了插入排序,堆排序和快速排序, 接下来从通过源码看看它都做了哪些事情。 Array.Sort https://source.dot.net/#System.Privat...

寒冰屋的专栏 365

Sigrity System Explorer Transient Analysis模式进行瞬态仿真分析操作指导-单端信号

Sigrity System Explorer Transient Analysis模式可以用于瞬态仿真分析,通过搭建简易拓扑用于前仿真分析通道的时域性能,下面搭建一个简易的单端拓扑进行说明,以下图为例,准备好发送接收端的IBIS模型, (ibis_se.ibs,本例发送接收端都使用相同的IBIS模型),以及传输线的S参数模型(welement_se.sp)最上方的图形界面是传输线的模型,本例是一个上下都有参考平面的带状线,右侧的梯形是蚀刻角度,根据W1和W2以及铜厚来确定。

weixin_54787054的博客 416

C# List<>.Sort() 排序的底层实现原理

首先,C# List<>.Sort() 排序的底层实现原理就是快速排序 + 堆排序(.net 4.5用的内省排序)。 大佬可以 return了。 接下来,让我们一一还原案发现场。 源码干货预警,头大!!!!! // 1,看到我们调用的Sort方法 public void Sort(IComparer<T> comparer) { Sort(0, Count, comparer); } // 2,进入Sort(), 这里只关注倒数第二行,调用了Array.Sort() public

少侠Smile丶 4033

Qt应用软件【协议篇】自定义协议处理串口半包贴包

Qt串口数据,半包,贴包,丢包数据处理

小鱼酱的博客 1211

反爬虫:POST 请求参数中 Sign 的加密机制详解,并设计带 Sign 校验的网站

本文介绍了API请求中sign签名的生成原理及实现方法。sign是通过对请求参数加密生成的一串字符串,用于验证请求合法性,防止参数篡改、重放攻击和伪造请求。其生成步骤包括参数排序、拼接字符串、加盐和哈希加密。文章还演示了如何在FastAPI后端实现带sign验证的新闻网站,包括参数校验、时间戳验证和签名比对等安全措施,有效提升API安全性,增加爬虫逆向难度。

数据知道的博客 4075

C#基础 Array Sort 从小到大,从大到小排序

 .NET Framework : 4.7.2        IDE : Visual Studio Community 2019         OS : Windows 10 x64     typesetting : Markdown         blog : blog.csdn.net/yushaopu        gi...

心少朴 9729

计算电磁学(三)有限差分方法

有限差分方法(FDM)是一种数值处理方法,通过将偏微分方程变换为一组代数方程,通过求解代数方程组来得到原边值问题的近似值。由于有限差分法非常简单,所以也特别的稳定高效。其中时域有限差分方法(FDTD)是电磁分析中的常用方法。在计算电磁学中,常用有限差分方法(finite difference equations)来替代微分方程。一个有限差分法通常包括三个步骤将求解域划分网格用有限差分方程逼近给定的微分方程求解在给定边界条件和初始状态下的方程常用的网格模型方阵斜方阵三角阵圆形阵。

CCC_B的博客 1639

工业级排序算法实战:Timsort、Introsort与Radix Sort原理及调优

排序算法是数据处理的底层基石,其性能不仅取决于时间复杂度,更受内存访问模式、CPU缓存行为、分支预测效率和硬件特性深度制约。Timsort凭借自适应run识别与稳定合并策略,在局部有序数据(如日志、时序流)中实现近线性性能;Introsort通过递归深度监控、三数取中pivot与小数组插入优化,为快排注入确定性保障;Radix Sort则绕过比较操作,在整数、IP、字符串等固定键长场景下突破O(n log n)理论瓶颈。这些工业级实现广泛应用于Java/Python排序库、Linux内核、PostgreSQ

weixin_30861797的博客 369

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

用VS2010调试微软开放的部分源码[参考]

msdn上有一篇讲解如何用vs2008调试源码的文章:http://blogs.msdn.com/b/sburke/archive/2008/01/16/configuring-visual-studio-to-debug-net-framework-source-code.aspx 今天在vs2010上试了下,发现其实也可以,关键设置二个地方: 然后换到Symbols 在...

weixin_30663471的博客 110

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

NewLife.Cube WebAPI接口规范:ApiResponse统一响应、分页排序与高级搜索,前端对接必读

如果你正在用前后端分离的方式对接 **NewLife.Cube** 这个 .NET 快速开发平台,那么这篇文章就是为你准备的。NewLife.Cube 是一款 Web 快速开发平台,内置用户权限管理、SSO 登录、OAuth 服务端、数据导出与分享等模块。本文将完整拆解它的 **WebAPI 接口规范**:统一的 `ApiResponse` 响应结构、标准 CRUD 调用方式、Pager 分页排序

gitblog_00805的博客 357

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

用VS2010调试微软开放的部分源码

msdn上有一篇讲解如何用vs2008调试源码的文章:http://blogs.msdn.com/b/sburke/archive/2008/01/16/configuring-visual-studio-to-debug-net-framework-source-code.aspx 今天在vs2010上试了下,发现其实也可以,关键设置二个地方: 然后换到Symbols 在Cache ...

weixin_34346099的博客 129

Gitnuro:免费跨平台 Git 图形客户端,不敲一行命令也能完成变基、Blame 和按块暂存

Gitnuro 是一款基于 Compose Multiplatform 与 JGit 构建的 FOSS Git 客户端,同时提供 Windows、macOS 和 Linux 版本。它面向两类人:刚学 Git、不想死记命令参数的新手,以及觉得终端里敲 rebase、diff 长参数太繁琐的老手。克隆、提交、diff、分支、拉取推送这些日常动作在一个桌面窗口里完成,变基交互式编辑、blame、按行暂存

gitblog_00358的博客 636

C#开发者必修课:从.NET底层到硬件原理的工程化基础

在现代软件开发中,'基础'并非过时知识,而是支撑高性能、高可靠系统的核心思维模型。理解算法与数据结构,本质是掌握问题建模语言——如B+树如何适配消息时序检索,倒排索引怎样优化多条件筛选;深入.NET运行时机制(如String.Concat内存分配、Dictionary扩容与HashCode设计),才能预判GC压力与锁竞争风险;而计算机体系结构认知(缓存局部性、内存访问模式)则直接决定代码在生产环境的真实性能。这些基础能力共同构成技术决策的‘预判雷达’,让开发者从被动救火转向主动设计。本文聚焦C#/.NET生

dejz8829的专栏 402

BUUCTF-WEB详细解题攻略第二页(按解出数降序排序)

BUUCTF-WEB题解索引,按解出数排序。每题附详细Payload与思路,适合CTF刷题题备查。

2503_94637398的博客 744

Java 泛型万字终极笔记:从类型擦除、PECS 到通配符捕获,2026 面试源码级定稿

泛型是 Java 面试区分初级与中高级开发的重难点。本文对标 JLS 规范,完整讲解类型擦除、桥接方法、PECS 原则、通配符捕获、堆污染、Enum 递归类型边界等底层原理,附带 17 道大厂高频面试真题解析,适合有 Java 基础、备战面试、想吃透泛型源码级原理的开发者。零基础同学建议先阅读配套入门篇,打好基础再深入学习。

一线 Java 开发,专注 Java 核心原理、生产踩坑与架构面试实战。 607
上一篇: 【C#】深拷贝与浅拷贝
下一篇: 【JQuery】onload和Jquery初次加载对比
It_sharp
博客等级 码龄10年 51粉丝 231原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值