【问题标题】:Bubblesort int returning only 0'sBubblesort int 仅返回 0
【发布时间】:2013-12-06 16:17:05
【问题描述】:

所以我有这个家庭作业(做冒泡排序的唯一原因)

使用 Visual Studio,我制作了 2 个数组,其中一个是未排序的数字,另一个是排序的数字。

我的代码将在这里粘贴,只会在两个数组中返回 0,我不知道我做错了什么,所以请帮帮我!

namespace WindowsFormsApplication5
{
    public partial class Form1 : Form
    {


        public Form1()
        {
            InitializeComponent();
        }

        private void btnBubbleSort_Click(object sender, EventArgs e)
        {
            int[] numbers = new int[100];
            foreach (int value in numbers)
            {
                lstBubbleUnorderd.Items.Add(value);

            }

            for (int y = 0; y < 100; y++)
            {
                for (int i = 100 - 1; i > y; --i)
                {
                    if (numbers[i] <= numbers[i - 1])
                    {
                        int temp = numbers[i];
                        numbers[i] = numbers[i - 1];
                        numbers[i - 1] = temp;
                    }
                }
            }
            for (int j = 0; j < 100; j++)
            {
                lstBubbleOrderd.Items.Add(numbers[j]);

            }
        }
    }
}

================================================ =============================================

感谢你们,我的代码现在可以正常工作了

我的新代码如下:

命名空间 WindowsFormsApplication5 { 公共部分类Form1:表格 {

    public Form1()
    {
        InitializeComponent();


    }

    private void btnBubbleSort_Click(object sender, EventArgs e)
    {
        lstBubbleOrderd.Items.Clear();
        lstBubbleUnorderd.Items.Clear();

        Random RndNmbrs = new Random();
        int n = RndNmbrs.Next();
        for (int a = 0; a < 10; a++)

        lstBubbleUnorderd.Items.Add(RndNmbrs.Next(0, 10));
        int[] numbers = new int[lstBubbleUnorderd.Items.Count];
        for (int i = 0; i < numbers.Length; i++)
        {
            numbers[i] = int.Parse(lstBubbleUnorderd.Items[i].ToString());
        }



        for (int y = 0; y < numbers.Length; y++)

        {           

            for (int i = numbers.Length - 1; i > y; --i)
            {
                if (numbers[i] <= numbers[i - 1])
        {
                int temp = numbers[i];
                numbers[i] = numbers[i - 1];
                numbers[i - 1] = temp;
    }
}


                for (int j = 0; j < numbers.Length; j++)
            {
                lstBubbleOrderd.Items.Add(numbers[j]);
            }

        }

    private void button1_Click(object sender, EventArgs e)
    {

    }
    }
}

【问题讨论】:

  • 未排序的数字从何而来?...
  • 请学习使用调试器。单步执行代码几秒钟就会使问题变得非常清楚。
  • Ken White 我怎么知道问题出在哪里?请解释一下,因为我对它很陌生,而且在找到我的冒泡排序问题的答案之前,我已经搜索了两天(大多数时候,答案描述得有点高级)

标签: c# visual-studio-2010 bubble-sort


【解决方案1】:

您在这里创建了数字数组:

int[] numbers = new int[100];

但是你从来没有用任何东西填充它,所以它的所有值都被初始化为零。

也许您的本意是这样的(结合leemo's answer 的建议)?

int[] numbers = new int[lstBubbleUnorderd.Items.Count];
for (int i = 0; i < numbers.Length; i++)
{
    numbers[i] = int.Parse(lstBubbleUnorderd.Items[i].ToString());
}
for (int y = 0; y < numbers.Length; y++)
{
    for (int i = numbers.Length - 1; i > y; --i)
    {
        if (numbers[i] <= numbers[i - 1])
        {
            int temp = numbers[i];
            numbers[i] = numbers[i - 1];
            numbers[i - 1] = temp;
        }
    }
}
for (int j = 0; j < numbers.Length; j++)
{
    lstBubbleOrderd.Items.Add(numbers[j]);
}

这会将输入到lstBubbleUnorderd 中的所有数字读入您的numbers 数组,对它们进行排序,然后在lstBubbleOrderd 中打印出来。

【讨论】:

  • 谢谢你的回复,我不知道我应该把你刚刚给我的台词放在哪里?我很抱歉问这个问题,但我对 c# 很陌生,对bubblesort 完全陌生。提前致谢!
  • @D3l4n0 假设你想从lstBubbleUnordered 中的任何值填充数组,你可以用这个替换你的第一个foreach-loop。
  • 好的,我将其更改为您的解决方案以及来自 leemo 的解决方案。之后我需要更改行 lstBubbleUnorderd.Items.Add(value);我将其更改为 lstBubbleUnorderd.Items.Add(numbers);但这改变了对 int32[]array 的返回。而不是整数。谢谢你帮助我
  • @D3l4n0 你好像误会了。请参阅我的更新答案以获得澄清。
  • { numbers[i] = int.Parse(lstBubbleUnorderd.Items[i].ToString()); } 是第一个循环的主体,for (int y = 0; y &lt; numbers.Length; y++) 是第二个循环的标题。你对哪一部分感到困惑?
【解决方案2】:

除了@p.s.w.g 的回答:

您可能需要考虑在循环中避免文字计数阈值。

所以不要这样:

for (int y = 0; y < 100; y++)
            {
                for (int i = 100 - 1; i > y; --i)
                {

您可能希望根据数组的长度动态初始化它们:

for (int y = 0; y < numbers.Length; y++)
        {
            for (int i = numbers.Length - 1; i > y; --i)
            {

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-22
    • 2013-08-20
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 2018-10-15
    相关资源
    最近更新 更多