C#快速排序

来源:互联网 发布:命理师 知乎 编辑:程序博客网 时间:2024/05/22 00:11
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Diagnostics;namespace ConsoleApplication1{    public class QuickSort    {        /// <summary>         /// 排序         /// </summary>         /// <param name="numbers">待排序数组</param>         /// <param name="left">数组第一个元素索引Index</param>         /// <param name="right">数组最后一个元素索引Index</param>         private static void Sort(int[] numbers, int left, int right)        {            //左边索引小于右边,则还未排序完成             if (left < right)            {                //取中间的元素作为比较基准,小于他的往左边移,大于他的往右边移                 int middle = numbers[(left + right) / 2];                int i = left - 1;                int j = right + 1;                while (true)                {                    while (numbers[++i] < middle) ;                                            while (numbers[--j] > middle) ;                        if (i >= j)                            break;                        Swap(numbers, i, j);                                    }                Sort(numbers, left, i - 1);                Sort(numbers, j + 1, right);            }        }        /// <summary>         /// 交换元素值         /// </summary>         /// <param name="numbers">数组</param>         /// <param name="i">当前左边索引</param>         /// <param name="j">当前右边索引</param>         private static void Swap(int[] numbers, int i, int j)        {            int number = numbers[i];            numbers[i] = numbers[j];            numbers[j] = number;        }        public static void Main()        {            Stopwatch sw = new Stopwatch();            //int[ ] max = { 99,26,59,13 };            int[ ] max = GetRand(0,9000,9000);            sw.Start();            //这里填写要执行的代码            //Sort(max,0,max.Length - 1);            Sort_lcl.Sort(max,0,max.Length-1);            //这里填写要执行的代码            sw.Stop();            //for(int i = 0;i < max.Length;i++)            //{            //    Console.WriteLine(max[i].ToString());            //}            StringBuilder temp = new StringBuilder();            for(int i = 0;i < max.Length;i++)            {                temp.Append(max[i].ToString() + ",");            }            Console.WriteLine(temp.ToString().Substring(0,temp.Length - 1));            Console.WriteLine("总运行时间:" + sw.Elapsed);            Console.WriteLine("测量实例得出的总运行时间(毫秒为单位):" + sw.ElapsedMilliseconds);            Console.WriteLine("总运行时间(计时器刻度标识):" + sw.ElapsedTicks);            Console.WriteLine("计时器是否运行:" + sw.IsRunning.ToString());            Console.ReadLine();        }        /// <summary>        /// 获取无重复随机数        /// </summary>        /// <param name="minValue"></param>        /// <param name="maxValue"></param>        /// <param name="count"></param>        /// <returns></returns>        private static int[ ] GetRand(int minValue,int maxValue,int count)        {            maxValue = maxValue - minValue + 1;            int[ ] arrInt = new int[maxValue];            for(int i = 0;i < maxValue;i++)            {                arrInt[i] = i + minValue;            }            int[ ] arrResult = new int[count];            int n = maxValue;            Random rand = new Random();            for(int i = 0;i < count;i++)            {                int index = rand.Next(0,n);                arrResult[i] = arrInt[index];                arrInt[index] = arrInt[--n];            }            return arrResult;        }    } }

原创粉丝点击