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
  • 相关阅读:
    Python中的类(上)
    Django REST Framework API Guide 07
    Django REST Framework API Guide 06
    Django REST Framework API Guide 05
    Django REST Framework API Guide 04
    Django REST Framework API Guide 03
    Django REST Framework API Guide 02
    Django REST Framework API Guide 01
    Django 详解 信号Signal
    Django 详解 中间件Middleware
  • 原文地址:https://www.cnblogs.com/LeimOO/p/3798602.html
Copyright © 2011-2022 走看看