程序猿修仙之路--算法之快速排序到底有多快 (3)

2. 当一个数组为无序并且重复元素不多时候,也适合快速排序。为什么提出重复元素这个点呢?因为如果重复元素过多,本来重复元素是无需排序的,但是快速排序还是要划分为更多的子数组来比较,这个时候也许插入排序更适合

程序猿修仙之路--算法之快速排序到底有多快


程序猿修仙之路--算法之快速排序到底有多快


试炼一发吧

程序猿修仙之路--算法之快速排序到底有多快

1

c#武器版本


       static void Main(string[] args)        {

           List<int> data = new List<int>();

            for (int i = 0; i < 11; i++)

           {                data.Add(new Random(Guid.NewGuid().GetHashCode()).Next(1, 100));            }            //打印原始数组值            Console.WriteLine($"原始数据: {string.Join(",", data)}");            quickSort(data, 0, data.Count - 1);            //打印排序后的数组            Console.WriteLine($"排序数据: {string.Join(",", data)}");            Console.Read();

       }

    public static void quickSort(List <int> source, int left, int right)

       {  

            int pivot = 0;

            if (left < right)

           {                pivot = partition(source, left, right);                quickSort(source, left, pivot - 1);                quickSort(source, pivot + 1, right);            }        }        //对一个数组/列表按照第一个元素 分组排序,返回排序之后key所在的位置索引        private static int partition(List<int> source, int left, int right)

       {  

            int key = source[left];  

            while (left < right)

           {                //从右边筛选 大于选取的值的不动,小于key的交换位置                while (left < right && source[right] >= key)                {                    right--;

               }

                source[left] = source[right];

                while (left < right && source[left] <= key)

               {                    left++;

               }  

                source[right] = source[left];

           }

            source[left] = key;  

            return left;

       } 2 golang 武器版

package main

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgyfxf.html