【发布时间】:2012-10-24 02:56:42
【问题描述】:
我正在使用random 和sorting 方法。到目前为止,我有线性方法工作。我正在尝试实现一种方法,让用户决定使用哪种类型的排序,例如linear、bubble、index 等。所以我添加了带有标签textBox7 的Key 和@ 987654328@,用户点击它,直到找到他们想要的排序方法。当 Keytextbox7 选择了一个值时,排序数组button2 将执行该特定排序方法。如何根据Key 值执行特定的排序方法?下面是我如何设置 windows 窗体的图片
代码
namespace sortmachine
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Stopwatch sw = new Stopwatch();
Random r = new Random();
private int size = 0;
private int max = 0;
private int ops = 0;
private int[] ar1;
private int[] ar2;
private int[] ar3;
private void button1_Click(object sender, EventArgs e)
{
try
{
size = Convert.ToInt32(textBox2.Text);
max = Convert.ToInt32(textBox3.Text);
string s = "";
ar1 = new int[size];
ar2 = new int[size];
ar3 = new int[size];
for (int i = 0; i < size; i++)
{
int n = r.Next(0, max);
ar1[i] = n;
ar2[i] = ar1[i];
}
for (int i = 0; i < size; i++)
{
s += ar1[i].ToString() + " ";
}
listView1.Items.Add(s);
}
catch
{
MessageBox.Show("Please input information");
}
}
private void button2_Click(object sender, EventArgs e)
{
int min = max;
int n = 0;
string s="";
sw.Start();
for (int j = 0; j < size; j++)
{
for (int i = 0; i < size; i++)
{
if (min > ar2[i])
{
min = ar2[i];
n = i;
ops++;
}
if (min < ar2[i])
{
ops++;
}
}
ar2[n]=max;
ar3[j] = min;
min = max;
s += ar3[j] + " ";
}
TimeSpan x = sw.Elapsed;
textBox5.Text = x.ToString();
listView2.Items.Add(s);
listView2.Text = s;
textBox6.Text = Convert.ToString(ops);
if (checkBox1.Checked==true)
{
textBox1.AppendText(s+Environment.NewLine);
}
for (int i = 0; i < size; i++)
{
ar2[i] = ar1[i];
}
ops = 0;
}
}
}
【问题讨论】:
-
将排序与 UI 分开。每个排序方法都应该有一个像
List<int> BubbleSort (List<int> input)这样的签名——它甚至可以被进一步提取到一个接口中,但这应该“更干净”——排序函数应该不使用任何成员变量:仅输入参数和一些局部变量。 UI 只是获取要排序的内容并将其提供给 sort 函数,然后获取排序结果并将其推回 UI。各种算法可以在维基百科等上找到。 -
另外,使用 new Random(Guid.NewGuid().GetHashCode()) 播种随机数。
-
查理,如果您需要任何其他帮助,请告诉我。我使用winforms有点工作,总能用一些知识联系你。或者,如果您想要我的回答中的项目,那也是 :)。