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

    1. Algrithom

     ◾Given an array of values, pick a value as a pivot value

     ◾Check each value against the pivot value and

       - bring each value higher than the pivot value to the right of the pivot value: GreaterList

       - bring each value lower than or equal to the pivot to the left of the pivot value: LessList

     ◾ Recursively call the algorithm for the array left and the array right of the pivot (which is now in the right spot).

     ◾ Combine LessList + pivot + GreaterList.

    2. Implement

      public static void TestSimpleQuickSort()
            {
                List<int> intArray = TestData.GetListFromString();
                List<int> result = new List<int>();
                TimeWatcher.StartWatchFunc(SimpleQuickSort, intArray, out result);
                //TimeWatcher.StartWatchDelegate(SimpleQuickSort, intArray, out result);
            }
            
            public static List<int> SimpleQuickSort(List<int> a)
            {
                Random r = new Random();
                List<int> less = new List<int>();
                List<int> greater = new List<int>();
                if (a.Count <= 1)
                    return a;
                //int pos = r.Next(a.Count);
                int pos = a.Count/2;
    
                int pivot = a[pos];
                a.RemoveAt(pos);
                foreach (int x in a)
                {
                    if (x <= pivot)
                    {
                        less.Add(x);
                    }
                    else
                    {
                        greater.Add(x);
                    }
                }
                return Concat(SimpleQuickSort(less), pivot, SimpleQuickSort(greater));
            }
    
            private static List<int> Concat(List<int> less, int pivot, List<int> greater)
            {
                List<int> sorted = new List<int>(less);
                sorted.Add(pivot);
                foreach (int i in greater)
                {
                    sorted.Add(i);
                }
    
                return sorted;
            }
    
           
    View Code
    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Test.CA.Algorithm.Sorting
    {
        public class TimeWatcher
        {
            public delegate List<int> TestDelegate(List<int> array);
    
            public static void StartWatchAction( Action<List<int>> func, List<int> array)
            {
                Stopwatch watch = new Stopwatch();
                watch.Start();
    
                func(array);
    
                watch.Stop();
    
                Console.WriteLine(watch.Elapsed);
            }
    
            public static void StartWatchDelegate(TestDelegate func, List<int> array, out List<int> result)
            {
                Stopwatch watch = new Stopwatch();
                watch.Start();
    
                result = func(array);
    
                watch.Stop();
    
                Console.WriteLine(watch.Elapsed);
            }
    
            public static void StartWatchFunc(Func<List<int>, List<int>> func, List<int> array, out List<int> result)
            {
                Stopwatch watch = new Stopwatch();
                watch.Start();
    
                result = func(array);
    
                watch.Stop();
                
                Console.WriteLine(watch.Elapsed);
            }
        }
    }
    View Code
  • 相关阅读:
    爬取药智网中的方剂信息
    日报3.13
    数据库添加出错
    Bencode
    一些安全网络协议
    代码质量不重要
    Jordan Peterson
    随身记录的缺点
    Why is Go PANICking?
    go问
  • 原文地址:https://www.cnblogs.com/LeimOO/p/3798602.html
Copyright © 2011-2022 走看看