Я хочу создать 3 потока для 3 сортировки (пузырьковая сортировка, быстрая сортировка и сортировка слиянием), чтобы показать, какая функция сортирует быстро? для показа я делаю 3 массива кнопок (для каждой функции. 1 обр) и хочу отсортировать их по высоте. но у меня есть 2 важные проблемы:
1 - как показать подкачку и изменения в кнопках во время выполнения? форма будет отображаться после выполнения сортировки, но я хочу видеть, как эти изменения отображаются во время выполнения.
2 - Я не могу работать с потоками для одновременного запуска сортировки.
Теперь это мой код:
нить пространства имен
{
public partial class Form1 : Form
{
Button[] btns1;
Button[] btns2;
Button[] btns3;
public Form1()
{
InitializeComponent();
btns1 =new Button[] { button1, button2, button3, button4, button5, button6, button7, button8, button9, button10, button11, button12, button13, button14, button15, button16};
btns2 = new Button[] { button17, button18, button19, button20, button21, button22, button23, button24, button25, button26, button27, button28, button29, button30, button31, button32 };
btns3 = new Button[] { button33, button34, button35, button36, button37, button38, button39, button40, button41, button42, button43, button44, button45, button46, button47, button48 };
foreach (Button btn in btns1)
{
btn.Text = btn.Size.Height.ToString();
}
foreach (Button btn in btns2)
{
btn.Text = btn.Size.Height.ToString();
}
foreach (Button btn in btns3)
{
btn.Text = btn.Size.Height.ToString();
}
Thread t1 = new Thread(new ThreadStart(sort1));
Thread t2 = new Thread(new ThreadStart(sort2));
Thread t3 = new Thread(new ThreadStart(sort3));
}
void sort1() {
bsort(btns1, 16);
}
void sort2()
{
qsort(0, 15, btns2);
}
void sort3()
{
mgsort(0, 15, btns3);
}
Button aa = new Button(); Button aa2 = new Button();
void swap(int i,int j,Button[]btns)
{
aa = btns[i];
btns[i] = btns[j];
btns[j] = aa;
int t = btns[i].Location.X;
btns[i].Location = new Point(btns[j].Location.X, btns[i].Location.Y);
btns[j].Location = new Point(t, btns[j].Location.Y);
}
int part(int l, int h,Button[] btns)
{
int i, j=l;
int p = btns[l].Size.Height;
for (i = l +1; i <= h; i++)
if (btns[i].Size.Height < p)
{
j++;
swap(i, j, btns);
}
int s = j;
swap(l, j, btns);
return s;
}
void qsort(int l, int h, Button[] btns)
{
if (h > l)
{
int p = part(l, h, btns);
qsort(l, p-1,btns);
qsort(p+1, h,btns);
}
}
void bsort(Button[] btns,int n)
{
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
if (btns[j].Size.Height < btns[i].Size.Height)
{
aa2 = btns[i];
btns[i] = btns[j];
btns[j] = aa2;
int t = btns[i].Location.X;
btns[i].Location = new Point(btns[j].Location.X, btns[i].Location.Y);
btns[j].Location = new Point(t, btns[j].Location.Y);
Thread.Sleep(10);
}
}
}