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; } } }