📄 form1.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 + -