快速排序是一种比选择排序快得多的算法,当然是数据量大的时候,主要思想就是利用一个参考值,将大的组分成两个小的组,一个组都比参考值小,一个组都比参考值大。一直分,分到不能再分,再把每个组和参考值都合并起来
static void Main(string[] args) { List<int> list = new List<int>(); Random r = new Random(); for (int i = 0; i < 100000; i++) { list.Add(r.Next(1, 10000)); } Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); List<int> sort = quickSort(list); stopwatch.Stop(); foreach (int data in sort) { Console.WriteLine(data); } Console.WriteLine("运行时间:" + stopwatch.ElapsedMilliseconds); Console.ReadKey(); } static List<int> quickSort(List<int> datas) { int length = datas.Count; //只有一个元素或则没有元素就返回自身(已经排序好了) if (length < 2) { return datas; } //随机一个参考数 Random r = new Random(); int random_index = r.Next(0, length); int val = datas[random_index]; datas.RemoveAt(random_index); List<int> left = new List<int>();//比参考值小的组 List<int> right = new List<int>();//比参考值大的组 foreach (int data in datas) { if (data < val) { left.Add(data); } else { right.Add(data); } } left = quickSort(left); right = quickSort(right); //合并起来 left.Add(val); left.AddRange(right); return left; }
快速排序的运行时间:O( nlog(n) )
10W个随机数据排序运行时间:207ms(不知道是不是用了List的原因,还是写法问题,总觉得慢了)
详情看:吃菜网-选择排序和快速排序