当前位置: 首页 > news >正文

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

        做.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);
            }
        }
    }

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

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

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

相关文章:

  • 提交 bug 的内容书写规范
  • 迅为3A5000开发板龙芯自主指令集从里到外100%全国产设计方案
  • 使用Postman进行自动化集成测试
  • 基于容器的PaaS混合云的几种形式
  • PS1文件执行
  • 力扣(LeetCode)187. 重复的DNA序列(C++)
  • 通过脚手架vue-cli创建一个vue项目
  • JS圣诞树
  • Linux 安装nginx, 搭建nginx文件服务器
  • [洛谷]P3613 【深基15.例2】寄包柜
  • 蓝桥杯-飞行员兄弟
  • Bash 中的 Echo 换行符打印文字 \n
  • 【力学性能预测】基于BP神经网络的钢板力学性能预测(附完整代码和数据集,系列1)
  • 基于pytorch搭建CNN 对人像是否戴口罩进行检测分类 详细教程
  • 【正点原子I.MX6U-MINI移植篇】kernel移植过程详解(二)
  • ConfigParser模块
  • (一)汇编语言——基础知识
  • 5 | 如何更换证书
  • python新年倒计时代码
  • 电脑系统下载的镜像文件在哪里图解
  • 国铁:今天预计发送旅客2110万人次,加开列车1896列
  • 巴菲特批评贸易保护主义:贸易不该被当成武器来使用
  • 力保夏粮丰收,粮食大省江苏多地党政主官到田间察看小麦长势
  • 用小型核反应堆给数据中心供电,国内企业正在开展项目论证
  • 长三角议事厅| AI作曲时代:长三角如何奏响数字音乐乐章
  • 制定出台民营经济促进法有何重大意义?全国人大常委会法工委回应