⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.cs

📁 数据结构排序算法演示数据结构排序算法演示数据结构排序算法演示数据结构排序算法演示数据结构排序算法演示数据结构排序算法演示数据结构排序算法演示
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace GraphicsSort
{
    public partial class frmMain : Form
    {
        private const int ARRAYSIZE = 50;
        private const int MAXVALUE = 300;
        int[] list = new int[ARRAYSIZE];

        private object o = new object();
        private SortMeasureFactory smf;
        //Bitmap bmp;
        public frmMain()
        {
            InitializeComponent();
        }

        private void RandomFillList()
        {
            Random o = new Random();
            for (int i = 0; i < ARRAYSIZE; i++)
                list[i] = o.Next(MAXVALUE + 1);
        }


        private void PaintList(Graphics graph, Rectangle rect, int[] list, Bitmap bmp)
        {
            lock (o)
            {
                //Bitmap bmp = new Bitmap(rect.Width, rect.Height);
                Graphics g = Graphics.FromImage(bmp);
                int iListLength = list.Length;
                int GridWidth = rect.Width / iListLength;
                //Pen pen = new Pen(Color.Teal);
                SolidBrush brush = new SolidBrush(Color.Teal);
                Pen whitePen = new Pen(Color.White);
                g.Clear(Color.White);
                for (int i = 0; i < iListLength; i++)
                {
                    //g.DrawRectangle(pen, rect.X + i*GridWidth, rect.Bottom, rect.X + (i+1)*GridWidth-1, rect.Bottom - list[i] * rect.Height / MAXVALUE);
                    g.FillRectangle(brush, rect.X + i * GridWidth, rect.Bottom - list[i] * rect.Height / MAXVALUE, GridWidth - 1, list[i] * rect.Height / MAXVALUE);
                }
                graph.DrawImage(bmp, 0, 0);
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            RandomFillList();

            //bmp = new Bitmap(pnlSimpleSort.Width, pnlSimpleSort.Height);
//            this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer, true);
        }


        public void aevent(object sender, StepEventArgs e)
        {
            Control ctl = (Control)sender;
            PaintList(ctl.CreateGraphics(), ctl.ClientRectangle, e.list, e.bmp);
        }

        public void SortCompleteEvent(object sender, SortEventArgs e)
        {
            //MessageBox.Show(e.SortName + ":" + e.SwapCount.ToString()) ;
        }

        private void btnStart_Click(object sender, EventArgs e)
        {
            smf = new SortMeasureFactory();
            SimpleSort ss = new SimpleSort(list, pnlSimpleSort);
            BubbleSort bs = new BubbleSort(list, pnlBubbleSort);
            FastSort fs = new FastSort(list, pnlFastSort);
            SelectSort sels = new SelectSort(list, pnlSelectSort);
            InsertSort inss = new InsertSort(list, pnlInsertSort);
            Bubble2Sort b2s = new Bubble2Sort(list, pnlBubble2Sort);
            MergeSort ms = new MergeSort(list, pnlMergeSort);
            //ShellSHSort sss = new ShellSHSort(list, pnlShellSort);
            smf.Add(ss, aevent, SortCompleteEvent);
            smf.Add(bs, aevent, SortCompleteEvent);
            smf.Add(fs, aevent, SortCompleteEvent);
            smf.Add(sels, aevent, SortCompleteEvent);
            smf.Add(inss, aevent, SortCompleteEvent);
            smf.Add(b2s, aevent, SortCompleteEvent);
            smf.Add(ms, aevent, SortCompleteEvent);
            //smf.Add(sss, aevent, SortCompleteEvent);
            smf.StartMutiThreadSort();
            //ss.stepComplete += new StepComplete(aevent);
            //ss.sortComplete += new SortComplete(SortCompleteEvent);
            //bs.stepComplete += new StepComplete(aevent);
            //bs.sortComplete += new SortComplete(SortCompleteEvent);
            //fs.stepComplete += new StepComplete(aevent);
            //fs.sortComplete += new SortComplete(SortCompleteEvent);
            //ss.Sort();
            //bs.Sort();
            //fs.Sort();
            //MessageBox.Show("ok");
            //return;
            //Thread thread1 = new Thread(new ThreadStart(ss.Sort));
            //Thread thread2 = new Thread(new ThreadStart(bs.Sort));
            //Thread thread3 = new Thread(new ThreadStart(fs.Sort));
            //thread1.Start();
            //thread2.Start();
            //thread3.Start();
            
            //bool b1 = false,b2 =false,b3=false;
            //while (!b1 || !b2 || !b3)
            //{
            //    //System.DateTime.Now.Ticks
            //    if (!b1)
            //    {
            //        //ss.mut.WaitOne();
            //        PaintList(ss.ctl.CreateGraphics(), ss.ctl.ClientRectangle, ss.list);
            //        //ss.mut.ReleaseMutex();
            //        b1 = ss.IsComplete;
            //    }
                
            //    if (!b2)
            //    {
            //        //bs.mut.WaitOne();
            //        PaintList(bs.ctl.CreateGraphics(), bs.ctl.ClientRectangle, bs.list);
            //        //bs.mut.ReleaseMutex();
            //        b2 = bs.IsComplete;
            //    }
            //    if (!b3)
            //    {
            //        //fs.mut.WaitOne();
            //        PaintList(fs.ctl.CreateGraphics(), fs.ctl.ClientRectangle, fs.list);
            //        //fs.mut.ReleaseMutex();
            //        b3 = fs.IsComplete;
            //    }
            //    System.Threading.Thread.Sleep(50);
            //}
            //PaintList(ss.ctl.CreateGraphics(), ss.ctl.ClientRectangle, ss.list);
            //PaintList(bs.ctl.CreateGraphics(), bs.ctl.ClientRectangle, bs.list);
            //PaintList(fs.ctl.CreateGraphics(), fs.ctl.ClientRectangle, fs.list);
            //lblResult.Text = ss.SwapCount.ToString() + "    " + bs.SwapCount + "     " + fs.SwapCount;
        }

        private void btnNew_Click(object sender, EventArgs e)
        {
            RandomFillList();
            Bitmap bmp = new Bitmap(pnlBubbleSort.Width, pnlBubbleSort.Height);
            PaintList(pnlSimpleSort.CreateGraphics(), pnlSimpleSort.ClientRectangle, list, bmp);
            PaintList(pnlBubbleSort.CreateGraphics(), pnlBubbleSort.ClientRectangle, list, bmp);
            PaintList(pnlFastSort.CreateGraphics(), pnlFastSort.ClientRectangle, list, bmp);
            PaintList(pnlSelectSort.CreateGraphics(), pnlSelectSort.ClientRectangle, list, bmp);
            PaintList(pnlInsertSort.CreateGraphics(), pnlInsertSort.ClientRectangle, list, bmp);
            PaintList(pnlBubble2Sort.CreateGraphics(), pnlBubble2Sort.ClientRectangle, list, bmp);
            PaintList(pnlMergeSort.CreateGraphics(), pnlMergeSort.ClientRectangle, list, bmp);
        }

        private void frmMain_Shown(object sender, EventArgs e)
        {
            Bitmap bmp = new Bitmap(pnlBubbleSort.Width, pnlBubbleSort.Height);
            PaintList(pnlSimpleSort.CreateGraphics(), pnlSimpleSort.ClientRectangle, list, bmp);
            PaintList(pnlBubbleSort.CreateGraphics(), pnlBubbleSort.ClientRectangle, list, bmp);
            PaintList(pnlFastSort.CreateGraphics(), pnlFastSort.ClientRectangle, list, bmp);
            PaintList(pnlSelectSort.CreateGraphics(), pnlSelectSort.ClientRectangle, list, bmp);
            PaintList(pnlInsertSort.CreateGraphics(), pnlInsertSort.ClientRectangle, list, bmp);
            PaintList(pnlBubble2Sort.CreateGraphics(), pnlBubble2Sort.ClientRectangle, list, bmp);
            PaintList(pnlMergeSort.CreateGraphics(), pnlMergeSort.ClientRectangle, list, bmp);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            lblResult.Text = "";
            for (int i = 0; i < smf.Count; i++)
            {
                SortBase sb = smf[i] as SortBase;
                if (sb.IsComplete)
                {
                    lblResult.Text += sb.Name + ":" + sb.SwapCount + "   ";
                }
            }
        }

        private void btnPause_Click(object sender, EventArgs e)
        {

        }

    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -