【问题标题】:bubble sort between two listboxes unsorted and sorted c#两个未排序和排序的列表框之间的冒泡排序c#
【发布时间】:2020-04-15 17:01:00
【问题描述】:

当我单击按钮冒泡排序时,我创建了一个具有两个列表框(未排序和排序)的表单,它出现在未排序的列表框中,但现在想要单击另一个按钮,例如sort 并在已排序的列表框中以正确的顺序对它们进行排序,并清除未排序的列表框。

我是编程新手,因此很难理解编码。我已经搜索了我需要的内容,但似乎找不到明确的答案。

我的代码如下:

这会将它添加到我的未排序列表框中:

int[] myNumbers = { 5, 1, 8, 9, 15 };

lstunsorted.Items.Add(5);
lstunsorted.Items.Add(1);
lstunsorted.Items.Add(8);
lstunsorted.Items.Add(9);
lstunsorted.Items.Add(15); 

这是我的排序按钮下的内容,用于移动它们并进行排序:

        for (int intCount = lstunsorted.SelectedItems.Count - 1; intCount >= 0; intCount--)
        {
            lstsorted.Items.Add(lstunsorted.SelectedItems[intCount]);
            lstunsorted.Items.Remove(lstunsorted.SelectedItems[intCount]);
        }

        int[] arr = { 5, 1, 8, 9, 15 };
        int temp = 0;
        for (int i = 0; i < arr.Length; i++)
        {
        for (int J = 0; J < arr.Length; J++)
        {
        if (arr[i] > arr[J])
        {
                        temp = arr[i];

                        arr[i] = arr[J];

                        arr[J] = temp;
                    }
                }
            }

任何帮助都将不胜感激,并以初学者的形式进行解释,让我了解发生了什么。

【问题讨论】:

  • 您的代码执行顺序似乎不正确。您能否将 cmets 放入您的代码中以显示您试图从相应的 sn-p 中实现什么?那会很有帮助。另外,我没有看到您对编号进行排序,然后将其填充到排序的列表框中。相反,您似乎正在填充已排序的列表框,因为它来自未排序的列表框,并在不同的空间中完全应用排序逻辑
  • 您应该在排序后将项目添加到列表框中。因此,当您单击 Bubblo Sort 按钮时,未排序的项目将显示在未排序的列表框中。单击排序按钮时,您应该 1. 获取未排序列表框中的所有项目; 2. 应该对它们进行排序; 3.将它们添加到排序列表框
  • @Codeek - 这会将它添加到我的未排序列表框中:这只是将项目添加到列表框但不确定我是否需要 int[] myNumbers = { 5, 1, 8, 9, 15 }; .这就是我在排序按钮下的移动和排序:我个人认为这都是错误的,因为我是从我看到的视频中复制它的。
  • @OguzOzgul - 这正是我想要做的,但因为我是一个初学者,这对我来说是全新的,我正在学习。 JonasH 的回答阐明了我需要什么但仍然有问题
  • 您的排序在一个完全不同的数组上运行。(arr)。您需要直接对lstsorted.Items 进行排序,或者对arr 进行排序,然后从arr 填充lssortedIiems

标签: c# sorting listbox


【解决方案1】:

ListBox.Items 是一个无类型集合,这意味着您可以向它添加任何类型的值,字符串、int 等等。这使得使用起来相当麻烦,因此第一步应该是将其转换为常规数组或列表。

var myArray =  lstunsorted.Items.Cast<int>().ToArray();

.Cast&lt;int&gt;() 将列表中的每个项目转换为一个 int。这仅在项目实际上是整数时才有效,但在您的情况下它很好(否则请参阅.OfType&lt;T&gt;())。 .ToArray() 获取所有值并将它们放入一个新数组中。

然后您将对项目进行排序,我认为这是练习的重点。如果没有,可以用

Array.Sort(myArray );

最后一步是更新列表框。

lstsorted.Items.Clear();
foreach(var i in myArray )
{
    lstsorted.Items.Add(i);
}

【讨论】:

  • 您好乔纳斯,感谢您的回复。我试图从您的建议中了解发生了什么,当我单击冒泡排序时,我必须使用 lstunsorted.items.add 来获取出现在框中的数字。我已经输入了您提供的代码,我可以让项目出现,但是当我单击排序时,一切正常,除了排序不起作用。你是说我只需要 int[] mynumbers = { 5, 1, 8, 9, 15 };不添加每个?再次感谢
  • 问题可能出在您的排序实现中,请使用 Array.Sort 或有关如何编写bubbleSort 的众多教程之一。第一次谷歌点击:tutorialspoint.com/Bubble-Sort-program-in-Chash
  • @chubbse25 我还建议学习如何为您的程序使用调试器,这可以让您检查变量、控制流等。请参阅docs.microsoft.com/en-us/visualstudio/debugger/…
  • 我查看了您提供的链接,但不知道列表框是否需要排序代码,因为示例正在写入控制台。您可以在不使用 listbox.items.add 的情况下将数组中的数字添加到列表框吗?很抱歉这些问题,但 C# 编程对我来说是新的。
  • @chubbse25 列表框不需要排序。但是,如果数字从未排序的列表框中删除,并添加到已排序的列表框中,但未排序,则问题可能出在排序代码中。这可以通过使用 Array.Sort 轻松确认并查看它是否有效。
猜你喜欢
  • 2016-05-17
  • 2017-10-21
  • 1970-01-01
  • 1970-01-01
  • 2014-03-26
  • 2018-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多