快速排序法C#

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

namespace 快速排序法
{
    class Program
    {
        static int process = 0;
        static int size;
        static int[] data = new int[100];

        static void Main(string[] args)
        {
            Console.Write("请输入数组大小(100以下):");
            size = int.Parse(Console.ReadLine());
            Inputarr();
            Console.Write("原始数据为");
            Showdata();

            Quick(data, size, 0, size - 1);
            Console.Write("\n排序结果为:");
            Showdata();
            Console.ReadKey();
        }
        static void Inputarr()
        {
            //以随机数输入
            Random rand = new Random();
            int i;
            for (i = 0; i < size; i++)
            {
                data[i] = (Math.Abs(rand.Next(99))) + 1;
            }
        }

        static void Showdata()
        {
            int i;
            for (i = 0; i < size; i++)
            {
                Console.Write(data[i] + " ");
            }
            Console.WriteLine();
        }
        static void Quick(int[] d, int size, int lf, int rg)
        {
            int i, j, tmp;
            int lf_idx;
            int rg_idx;
            int t;
            //1:第一项的键值为d[lf]
            if (lf < rg)
            {
                lf_idx = lf + 1;
                rg_idx = rg;

                //排序
                while (true)
                {
                    Console.Write("[处理过程" + (process++) + "]=>");
                    for (t = 0; t < size; t++)
                    {
                        Console.Write("[" + d[t] + "]");
                    }
                    Console.Write("\n");

                    for (i = lf + 1; i <= rg; i++)
                    {
                        if (d[i] >= d[lf])
                        {
                            lf_idx = i;
                            break;
                        }
                        lf_idx++;
                    }
                    for (j = rg; j >= lf + 1; j--)
                    {
                        if (d[j] <= d[lf])
                        {
                            rg_idx = j;
                            break;
                        }
                        rg_idx--;
                    }
                    if (lf_idx < rg_idx)
                    {
                        tmp = d[lf_idx];
                        d[lf_idx] = d[rg_idx];
                        d[rg_idx] = tmp;
                    }
                    else
                    {
                        break;
                    }

                }
                if (lf_idx >= rg_idx)
                {
                    tmp = d[lf];
                    d[lf] = d[rg_idx];
                    d[rg_idx] = tmp;

                    Quick(d, size, lf, rg_idx - 1);

                    Quick(d, size, rg_idx + 1, rg);
                }
            }
        }
    }
}

在这里插入图片描述

发布了13 篇原创文章 · 获赞 0 · 访问量 663

猜你喜欢

转载自blog.csdn.net/Somewater_/article/details/103539637
今日推荐