zoukankan      html  css  js  c++  java
  • 快速排序——算法系列

    快速排序:

    思想:主要是利用了分而治之的思想,将一个大的排序问题简化成一个一个小的问题。

    代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Diagnostics;
    using System.Net;
    using System.Threading;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                for (int i = 1; i <= 5; i++)
                {
                    List<int> list = new List<int>();
                    //插入2k个随机数到数组中
                    for (int j = 0; j < 2000; j++)
                    {
                        Thread.Sleep(1);
                        list.Add(new Random((int)DateTime.Now.Ticks).Next(0, 100000));
                    }
                    Console.WriteLine("\n第" + i + "次比较:");
                    Stopwatch watch = new Stopwatch();
                    watch.Start();
                    var result = list.OrderBy(single => single).ToList();//这里这个single=>single不懂
                    watch.Stop();
                    Console.WriteLine("\n系统的快速排序耗费时间:" + watch.ElapsedMilliseconds);
                    Console.WriteLine("输出前是十个数:"+string.Join(",",result.Take(10).ToList()));
                    watch.Start();
                    new QuickSortClass().QuickSort(list, 0, list.Count - 1);
                    watch.Stop();
                    Console.WriteLine("\n自己的快速排序耗费时间:" + watch.ElapsedMilliseconds);
                    Console.WriteLine("输出前是十个数:" + string.Join(",", result.Take(10).ToList()));//这里也不是很懂
                    
                }
                Console.ReadLine();
            }
            //快速排序算法
        }
        public class QuickSortClass
        {
            private int Division(List<int> list, int left, int right)
            {
                int baseNum = list[left];
                while (left < right)
                {
                    while (left < right && baseNum <= list[right])
                        right--;
                    list[left] = list[right];
                    while (left < right && baseNum >= list[left])
                        left++;
                    list[right] = list[left];
                }
                list[left] = baseNum;
                return left;
            }
    
            public void QuickSort(List<int> list, int left, int right)
            {
                if (left < right)
                {
                    int i = Division(list, left, right);
                    QuickSort(list, left, i - 1);
                    QuickSort(list, i + 1, right);
                }
            }
        }
    }

    总结:

    快速排序是排序算法中最快的算法了,快的程度令人发指。

    http://www.cnblogs.com/huangxincheng/archive/2011/11/14/2249046.html

  • 相关阅读:
    活动安排问题
    完美字符串
    Codeforces Round #696 (Div. 2) 解题报告
    Codeforces 1459D
    Codeforces 25D
    POJ 1847
    LightOJ 1074
    POJ 3159
    POJ 1511
    POJ 1502
  • 原文地址:https://www.cnblogs.com/7ants/p/2954299.html
Copyright © 2011-2022 走看看