1. 程式人生 > >C#快速排序

C#快速排序

eric break vat () sys mes pri timespan trac

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace app
{
    class Program
    {
   
         static void Main(string[] args)
        {
            int[] arr = Insert(10); //待排序數組
            DateTime beforDT = System.DateTime.Now;

            Sort(arr, 
0, arr.Length - 1); //調用快速排序函數。傳值(要排序數組,基準值位置,數組長度) DateTime afterDT = System.DateTime.Now; TimeSpan ts = afterDT.Subtract(beforDT); Console.WriteLine("DateTime總共花費{0}ms.", ts.TotalMilliseconds); Console.ReadKey(); } static int
[] Insert(int count) { Random r1 = new Random(); int i = 0; int[] arr = new int[count]; while (i < count) { int a = r1.Next(10, 100000); arr[i] = a; i++; } return arr; }
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 && i < right) ; while (numbers[--j] > middle && j > 0) ; if (i >= j) break; Swap(numbers, i, j); } Sort(numbers, left, i - 1); Sort(numbers, j + 1, right); } } private static void Swap(int[] numbers, int i, int j) { int number = numbers[i]; numbers[i] = numbers[j]; numbers[j] = number; } } }

C#快速排序