Bubblesort int仅返回0

时间:2013-11-21 23:04:51

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

所以我有这个家庭作业(唯一的原因就是为什么会做出泡泡)

使用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)
    {

    }
    }
}

2 个答案:

答案 0 :(得分:6)

您在此处创建了数组:

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中打印出来。

答案 1 :(得分:1)

除了@ 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)
            {