Визуализация сортировки массива - C#
Формулировка задачи:
Народ необходимо написать программу визуальной сортировки массива. Но возник вопрос как это сделать. Я сначала создаю несколько прямоугольников, которые имеют одинаковую ширину, но разную длину. Как раз по этой длине я и буду производить сортировку. Вопрос в том как привязать код метода сортировки к этим фигурам, чтобы фигуры отсортировывались?
Решение задачи: «Визуализация сортировки массива»
textual
Листинг программы
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading; namespace WindowsFormsApplication1 { public partial class Form1 : Form { int s = 0;//количество сравнений int p = 0;//количество перестановок int n = 10; int temp = 0; Graphics gr; int j; Random r = new Random(); int[] a1; int[] a2; int[] a3; int[] a4; int[] a5; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { a1 = new int[n]; a2 = new int[n]; a3 = new int[n]; a4 = new int[n]; a5 = new int[n]; } private void drawRec() { panel1.Refresh(); int count = 0; for (int k = 0; k < n; k++) { if (k == j | k == j + 1) { if (radioButton1.Checked == true) gr.FillRectangle(Brushes.LightSkyBlue, 10 + count, 0, 20, a1[k]); if (radioButton2.Checked == true) gr.FillRectangle(Brushes.LightSkyBlue, 10 + count, 0, 20, a2[k]); if (radioButton3.Checked == true) gr.FillRectangle(Brushes.LightSkyBlue, 10 + count, 0, 20, a3[k]); count += 30; } } } private void button1_Click(object sender, EventArgs e) { for (int i = 0; i < n; i++) { a1[i] = (int)r.Next(0, 199); a2[i] = a3[i] = a4[i] = a5[i] = a1[i]; } gr = panel1.CreateGraphics(); //метод выбора if (radioButton1.Checked == true) { s = 0; p = 0; for (int i = 0; i < n; i++) { int min = a1[i]; int n_min = i; for (int j = i + 1; j < n; j++) { s++; if (min > a1[j]) { min = a1[j]; n_min = j; } } temp = a1[i]; a1[i] = min; a1[n_min] = temp; p++; drawRec(); Thread.Sleep(600); } } //вставки if (radioButton2.Checked == true) { s = 0; p = 0; for (int i = 1; i < n; i++) { int j; temp = a2[i]; for (j = i - 1; j >= 0 && temp < a2[j]; j--) { s++; a5[j + 1] = a5[j]; a5[j] = temp; p++; } a2[j + 1] = temp; p++; drawRec(); Thread.Sleep(600); } } //пузырек if (radioButton3.Checked == true) { for (int i = 0; i < n; i++) { for (j = 0; j < n - 1; j++) { s++; if (a3[j] > a3[j + 1]) { temp = a3[j]; a3[j] = a3[j + 1]; a3[j + 1] = temp; p++; } drawRec(); Thread.Sleep(600); } } } } private void panel1_Paint(object sender, PaintEventArgs e) { } } }