【问题标题】:Bubble sort in c# using windows forms. Newbies asking在 c# 中使用 windows 窗体进行冒泡排序。新手问
【发布时间】:2014-05-10 12:59:46
【问题描述】:

问题 = 已解决,谢谢大家!

我和我的伙伴正在开发一个程序来对用户自己输入的 x 个数字进行排序。这是我们的进步。该程序不会按照我们想要的方式运行,我们已经在互联网上检查了几个小时的解决方案,但似乎没有一个有效。请帮助我们修复代码。如果我理解正确的话,它是一个“冒泡排序程序”。

另外,我们都是 c# 新手,所以如果可能,请不要使用复杂的解决方案。只需尝试使用我们当前使用的函数来修改我们的代码。谢谢!

public partial class Form1 : Form
{
    List<int> nummerlista = new List<int>();

    public Form1()
    {
        InitializeComponent();
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        if (input.Text != "")
        {

            int siffra = Convert.ToInt32(input.Text);

            nummerlista.Add(siffra);
            //   nummerlista.Add(Convert.ToInt32(input.Text));

            System.Threading.Thread.Sleep(300);

            input.Clear();
        }

    }

    private void button2_Click(object sender, EventArgs e)
    {
        for (int i = 0; i < nummerlista.Count; i++)
        {
            output.AppendText(Convert.ToString(nummerlista[i]) + " ");
        }
        int t = 0;
        for (int v = 0; v < nummerlista.Count; v++)
        {
            for (int c = 0; c < nummerlista.Count; c++)
            {
                if (nummerlista[v] < nummerlista[c])
                {
                    t = nummerlista[v];

                    nummerlista[v] = nummerlista[c];

                    nummerlista[c] = t;
                }
            }
        }
        for (int i = 0; i < nummerlista.Count - 1; i++)
        {
            outputSorterad.AppendText(Convert.ToString(nummerlista[i]) + " ");
        }
    }
}

【问题讨论】:

  • 不能使用开箱即用的排序方法吗?还是某种基础研究?
  • 除上述之外.. 什么不起作用?
  • 不,我们不能,正如你所说,这是一个学校的基础研究项目,在这个项目中,我们几乎使用了迄今为止我们学到的所有功能。因此,如果存在,则不是使用“nummerlista.Sort”之类的功能的选项。谢谢!
  • 虽然冒泡排序是蹩脚的 O(n^2) 并且像 Sort() 这样的内置方法正在使用快速排序 - 这是 O(n*log(n)),但这种方法应该可以工作(排序nummerlista 从小到大)。你能举一个没有正确排序的例子吗?
  • 如果您解决了您的问题,请标记您帮助您解决问题的答案。如果您自己找到了解决方案,请回答您自己的问题。这会将帖子标记为已回答并帮助问题的未来读者。

标签: c# sorting bubble-sort


【解决方案1】:

由于您是 C# 新手,您需要了解大多数情况下 .Net 框架会为您提供这些基本功能 - 您只需找到它。

所以为了排序,你只需要针对通用列表调用 sort 方法nummerlista.Sort()http://msdn.microsoft.com/en-us/library/b0zbh7b6.aspx

如果这个问题的重点是实现算法https://stackoverflow.com/a/14768087/81053,那么这里有一个c#冒泡排序的例子

【讨论】:

  • 当然,他们永远也学不会自己做。人们应该使用排序,但他们也应该学习如何实现算法
  • 感谢您的回答,非常感谢。问题解决了!
【解决方案2】:

你只是在转储输出时出错了

for (int i = 0; i < nummerlista.Count - 1; i++)

应该是

for (int i = 0; i < nummerlista.Count; i++)

【讨论】:

  • 感谢您的回答,非常感谢。问题解决了!
  • @user3480405,当您得到答案时,请务必检查帖子左上角箭头下方的复选标记功能。祝你好运! (+1)
【解决方案3】:

几个建议:

打印时需要转储整个列表:

for (int i = 0; i < nummerlista.Count; i++)

当你对内部循环进行排序时,不需要走到列表的末尾。去外面的柜台就够了:

for (int v = 0; v < nummerlista.Count; v++)
        {
            for (int c = 0; c < v; c++)

此外,访问 List 的元素有点慢。可能更好的办法是在输入完成后立即将列表转换为数组。

最后,如果您不想练习不同的排序算法,您可以使用 List.Sort - http://msdn.microsoft.com/en-us/library/3da4abas(v=vs.110).aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-26
    • 1970-01-01
    • 2016-01-01
    • 2015-12-11
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多