Визуализация сортировки массива - 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)
        {
 
        }
    }
}

Оцени полезность:

14   голосов , оценка 3.786 из 5
Похожие ответы