C#迭代式和递归式快速排序

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

namespace TestCSharp
{
    class Program
    {
        static void Main(string[] args)
        {
            List<int> list = new List<int> { 2, 4, 1, 3, 8, 5, 7, 6 };

            Sort(list, 0, list.Count - 1);
            //SortIterator(list, 0, list.Count - 1);
            string s = "";
            for (int i = 0, length = list.Count; i < length; i++)
            {
                s += list[i] + ", ";
            }
            Console.WriteLine(s);

            Console.ReadKey();
        }

        static void Sort(List<int> list, int left, int right)
        {
            if (left >= right)
            {
                return;
            }

            int i = left;
            int j = right;
            int pivot = list[i];
            while (i < j)
            {
                while (j > i && list[j] >= pivot)
                {
                    j--;
                }

                list[i] = list[j];
                while (i < j && list[i] <= pivot)
                {
                    i++;
                }
                list[j] = list[i];
            }
            list[i] = pivot;
            Sort(list, left, i - 1);
            Sort(list, j + 1, right);
        }

        static void SortIterator(List<int> list, int start, int end)
        {
            if (start >= end)
            {
                return;
            }

            Stack<int> stack = new Stack<int>();
            stack.Push(start);
            stack.Push(end);

            while (stack.Count > 0)
            {
                int max = stack.Pop();
                int min = stack.Pop();
                if (min >= max)
                {
                    continue;
                }

                int i = min;
                int j = max; 
                int pivot = list[i];
                while (i < j)
                {
                    while (j > i && list[j] >= pivot)
                    {
                        j--;
                    }
                    list[i] = list[j];
                    while (i < j && list[i] <= pivot)
                    {
                        i++;
                    }
                    list[j] = list[i];
                }
                list[i] = pivot;

                stack.Push(j + 1);
                stack.Push(max);
                stack.Push(min);
                stack.Push(i - 1);
            }
        }
    }
}

 


版权声明:本文为qq_37273889原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。