• 简单的算法学习


    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;
                        }
                    }
                }
            }
    
        }
    
    }
  • 相关阅读:
    SVG
    JavaScript的性能优化
    sublime长期使用的快捷键
    spring实现AOP
    java之spring
    JAVA面试题02
    java面试题01
    MyBatis之关联关系
    MyBatis之动态sql
    MyBatis之sql映射文件
  • 原文地址:https://www.cnblogs.com/luludongxu/p/5780238.html
Copyright © 2020-2023  润新知