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

     

     

  • 相关阅读:
    [数据结构]二分查找
    [数据结构]堆排序
    [数据结构]冒泡排序
    android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale"
    android:hardwareAccelerated="true"
    Android 图形处理
    Android 屏幕适配
    Android 手机的屏幕分辨率大小汇总
    Android 模拟器常用的快捷键
    PopWindow的使用
  • 原文地址:https://www.cnblogs.com/smilejeffery/p/7218582.html
Copyright © 2011-2022 走看看