zoukankan      html  css  js  c++  java
  • 排序算法之快速排序

    1.基本思想

    它的基本思想是:选取第一个数作为基准数,设置左右两个指针,先从数组的尾部开始直到找到比基准数小的,然后这个数字赋值给头指针,接着从头指针开始直到找到比基准数大的数字,然后赋值给尾指针,直到左指针和右指针重合,通过这样的一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

    2.时间复杂度

    如果每次划分过程产生的区间大小都为n/2,由于快速排序法也是基于比较的排序法,其运行时间为Ω(nlogn),所以如果每次划分过程产生的区间大小都为n/2,则运行时间θ(nlogn)就是最好情况运行时间。

    3.代码实现

     

    namespace QuickSortPatt
    {
        public class Program
        {
            static void Main(string[] args)
            {
                Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
                int[] arry = { 9, 7, 12, 6, 8, 1 };
                Console.WriteLine("-------------排序前--------------");
                for (int i = 0; i < arry.Length; i++)
                {
                    Console.Write(arry[i] + " ");
                }
                Sort(arry);
                Console.WriteLine("
    -------------快速排序 排序后--------------");
                for (int i = 0; i < arry.Length; i++)
                {
                    Console.Write(arry[i] + " ");
                }
                Console.ReadKey();
            }
    
            public static int Partition(int []arry ,int left,int right)
            {
                var baseNum = arry[left];
                while (left < right)
                {
                    while (left < right && arry[right] > baseNum)
                        right--;
                    arry[left] = arry[right];
                    while (left < right && arry[left] < baseNum)
                        left++;
                    arry[left] = arry[right];
                }
                arry[left] = baseNum;
                return left;
            }
            public static  void QuickSort(int []arry,int left,int right)
            {
                var pivpos = Partition(arry, left, right);
                QuickSort(arry, left, pivpos - 1);
                QuickSort(arry, pivpos + 1,right);
            }
            public static void Sort(int[] arr)
            {
                if (arr == null || arr.Length == 0)
                    return;
                QuickSort(arr, 0, arr.Length - 1);
            }
        }
    }

     

     

  • 相关阅读:
    ORM执行原生sql, Python脚本调用Django环境, ORM事务, sql模式说明
    ORM多表更新删除 查询
    ORM多表操作
    Java BigDecimal类型的数据运算方法
    js获取表格中的数据转化为json字符串
    在threamleaf中使用循环遍历输出list集合
    sql中使用cast转化数据格式(整数或者小数)
    mybatis的xml中使用模糊搜索查询
    k8s挂载ceph
    kubernetes HPA
  • 原文地址:https://www.cnblogs.com/smilejeffery/p/7218582.html
Copyright © 2011-2022 走看看