C#个人珍藏基础类库分享 — 9、基本排序算法类SortHelper

news/2024/10/31 1:34:29/

        做.NET开发的同学,一套简单易用的基础类库是必不可少的,这里把我混迹C#圈子十余载珍藏的类库分享出来,希望能够给刚踏入开发门槛的朋友一些帮助。

        后续会逐步分享基础库的其余部分,先列个大纲:

C#个人珍藏基础类库分享 — 1、通用缓存帮助类CacheHelper
C#个人珍藏基础类库分享 — 2、Memcached缓存帮助类MemcachedHelper
C#个人珍藏基础类库分享 — 3、目录、文件帮助类FileHelper
C#个人珍藏基础类库分享 — 4、字节数组帮助类BytesObjectHelper
C#个人珍藏基础类库分享 — 5、日志帮助类LogHelper
C#个人珍藏基础类库分享 — 6、数据库处理帮助类SqlHelper
C#个人珍藏基础类库分享 — 7、Xml处理帮助类XmlHelper
C#个人珍藏基础类库分享 — 8、通用工具帮助类ToolHelper
C#个人珍藏基础类库分享 — 9、基本排序算法类SortHelper

这里整理了以下排序算法:

1、冒泡排序法; 2、插入排序法; 3、选择排序法; 4、希尔排序法; 5、快速排序法

class SortHelper{/// <summary>/// 冒泡排序法/// </summary>/// <param name="list"></param>public static void BubbleSort(int[] list){for (int i = 0; i < list.Length; i++){for (int j = i; j < list.Length; j++){if (list[i] < list[j]){int temp = list[i];list[i] = list[j];list[j] = temp;}}}}/// <summary>/// 插入排序法/// </summary>/// <param name="list"></param>public static void InsertionSort(int[] list){for (int i = 1; i < list.Length; i++){int t = list[i];int j = i;while ((j > 0) && (list[j - 1] > t)){list[j] = list[j - 1];--j;}list[j] = t;}}/// <summary>/// 选择排序法/// </summary>/// <param name="list"></param>public static void SelectionSort(int[] list){int min;for (int i = 0; i < list.Length - 1; i++){min = i;for (int j = i + 1; j < list.Length; j++){if (list[j] < list[min])min = j;}int t = list[min];list[min] = list[i];list[i] = t;}}/// <summary>/// 希尔排序法/// </summary>/// <param name="list"></param>public static void ShellSort(int[] list){int inc;for (inc = 1; inc <= list.Length / 9; inc = 3 * inc + 1) ;for (; inc > 0; inc /= 3){for (int i = inc + 1; i <= list.Length; i += inc){int t = list[i - 1];int j = i;while ((j > inc) && (list[j - inc - 1] > t)){list[j - 1] = list[j - inc - 1];j -= inc;}list[j - 1] = t;}}}private static void Swap(ref int l, ref int r){int s;s = l;l = r;r = s;}/// <summary>/// 快速排序法/// </summary>/// <param name="list"></param>/// <param name="low"></param>/// <param name="high"></param>public static void QuickSort(int[] list, int low, int high){int pivot;int l, r;int mid;if (high <= low){return;}else if (high == low + 1){if (list[low] > list[high])Swap(ref list[low], ref list[high]);return;}mid = (low + high) >> 1;pivot = list[mid];Swap(ref list[low], ref list[mid]);l = low + 1;r = high;do{while (l <= r && list[l] < pivot)l++;while (list[r] >= pivot)r--;if (l < r)Swap(ref list[l], ref list[r]);} while (l < r);list[low] = list[r];list[r] = pivot;if (low + 1 < r){QuickSort(list, low, r - 1);}if (r + 1 < high){QuickSort(list, r + 1, high);}}}

上述几个排序算法,在开发过程中很少用到,但是却是面试家常便饭,因为这几个算法是学习算法的过程必备的。

那么,既然都是排序算法,这几个算法究竟哪个效率高一点呢?

后面会专门出一篇文章来说明这个问题。


http://www.ppmy.cn/news/6048.html

相关文章

【栈与队列】——栈的实现及应用

目录概念栈的实现初始化栈入栈出栈获取栈顶元素获取栈中有效元素个数判断栈是否为空栈的销毁栈的应用概念 栈 栈是一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底栈中的数据元素遵…

Java守护线程简述

Java守护线程简述前言前置知识线程JVM退出代码测试查看子线程是否继承父线程的类型守护线程在程序退出时的表现普通线程在程序退出时的表现总结前言 最近再看《Java并发编程实战》&#xff0c;正好有一小节关于守护线程的知识&#xff0c;这里做一点小总结。 前置知识 这里只…

圣诞节学算法---线段树

线段树 快到圣诞节了&#xff0c;圣诞树是不是很漂亮&#xff1f;今天我们就来学习一下它的近亲的线段树 (话说这两玩意好像除了读音相似没啥关系) 引入 例题 1 给定一个数组 aaa 求数组中下标为l−rl - rl−r元素的和 看到这题大家都很容易想到用前缀和以O(n)O(n)O(n)预处…

聊聊首次使用航顺HK32F030C8T6的体验

先说结论&#xff0c;项目基本上开发测试完成了,mcu运行正常。 这个项目是一个智能家居的项目&#xff0c;主板和副板都使用了HK32F030C8T6&#xff0c;这也是笔者第一次使用航顺的芯片。 关于这个芯片的资料&#xff0c;从官网只能下载到datasheet和user mannal的pdf文档&am…

IO多路复用实现方式

IO分类 NIO NIO即同步非阻塞IO。非阻塞的recvfrom系统调用之后&#xff0c;进程并没有被阻塞&#xff0c;内核马上返回进程&#xff0c;如果数据还没准备好&#xff0c;此时会返回一个error。进程在返回之后&#xff0c;可以干点别的事情&#xff0c;然后再发起recvfrom系统调…

硬盘 / 硬盘控制器主要端口寄存器 / Controller Register

文章目录IDE 与 SATA硬盘分区表结构硬盘控制器主要端口寄存器data 寄存器Error && FeaturesErrorFeaturesSector countLBA low | mid | highdevice 寄存器StatusCommandIDE 与 SATA 很久以前&#xff0c;硬盘控制器和硬盘是分开的&#xff0c;后面开发了一个新接口&am…

【小程序】案例 - 本地生活(首页)

1. 首页效果以及实现步骤 新建项目并梳理项目结构 配置导航栏效果 配置 tabBar 效果 实现轮播图效果 实现九宫格效果 实现图片布局 2. 接口地址 获取轮播图数据列表的接口 【GET】 https://www.escook.cn/slides 获取九宫格数据列表的接口 【GET】 https://www.esco…

C++内存管理

内存管理 c&#xff1a;malloc、calloc、realloc、free c&#xff1a;new&#xff08;不会初始化&#xff09;、delete 内存管理方式 对于内置类型 //申请和释放单个元素的空间&#xff0c;使用new和delete操作符 int* p1 new int;//申请1个int类型的空间 delete p1;int*…