简单的算法学习

复制代码
namespace ConsoleApp
{
    static class Program
    {

        static void Main(string[] args)
        {
            int[] ss = new int[] { 7, 2, 8, 3, 4, 1, 11, 9, 234, 72, 5 };
            KSPX(ss, 0, ss.Length - 1);
            Console.ReadKey();
        }

        /// <summary>
        /// 快速排序
        /// </summary>
        /// <param name="ss"></param>
        /// <param name="left_ys"></param>
        /// <param name="right_ys"></param>
        private static void KSPX(int[] ss, int left_ys, int right_ys)
        {
            if (right_ys - left_ys > 0) //跳出递归
            {
                var left = left_ys;   //获得位置,因为left是要变动的,所以不能直接用left_ys
                var right = right_ys;

                var x = ss[left++];  //记录第一个数据,然后移动下标,跳过第一个数据

                while (left < right) //没相撞的情况下
                {
                    while (ss[right] > x && left < right) //从右向左逐个查找,大于就跳过,小于就跳出循环
                    {
                        right--;
                    }
                    while (ss[left] < x && left < right) //从左往右找小于的
                    {
                        left++;
                    }
                    if (left < right) //可能经过上面的操作left>=right,所以这里要判断下
                    {
                        //将找到的2个数值进行替换
                        var tmp = ss[left];
                        ss[left] = ss[right];
                        ss[right] = tmp;
                        //替换后移动下标
                        left++;
                        right--;
                    }
                }
                if (ss[left_ys] > ss[left]) //检查完毕后,将基准值和最后left(小于)下标指向的数据进行替换,前提是基准值大于left(可能会出现小于的现象——基准值本来就是最小的)
                {
                    ss[left_ys] = ss[left];
                    ss[left] = x;
                }
                KSPX(ss, left_ys, left - 1); //递归右半部份
                KSPX(ss, left + 1, right_ys); //递归左半部分
            }
        }

        /// <summary>
        /// 选择排序
        /// </summary>
        /// <param name="ss"></param>
        private static void XZPX(int[] ss)
        {
            for (int i = 0; i < ss.Length; i++)
            {
                var index = i;
                for (int j = (i + 1); j < ss.Length; j++)
                {
                    if (ss[index] > ss[j])
                    {
                        index = j;
                    }
                }
                var tmp = ss[i];
                ss[i] = ss[index];
                ss[index] = tmp;
            }
        }

        /// <summary>
        /// 冒泡排序
        /// </summary>
        /// <param name="ss"></param>
        private static void MPPX(int[] ss)
        {
            for (int i = 0; i < ss.Length; i++)
            {
                for (int j = 0; j < ss.Length - 1 - i; j++)
                {
                    if (ss[j] > ss[j + 1])
                    {
                        var tmp = ss[j];
                        ss[j] = ss[j + 1];
                        ss[j + 1] = tmp;
                    }
                }
            }
        }

    }

}
复制代码

 

posted @   WmW  阅读(249)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示