冒泡排序和foreach指数

时间:2013-02-21 00:31:18

标签: c#

我在下面有一些代码用于按钮点击事件, 它使用冒泡排序。我有点不清楚 使用。尝试按升序对数组进行排序 订购。另外,我必须使用foreach并且需要 从中得到一个指数。 尝试int z = a.GetEnumerator();不起作用。 int k = 0; //作弊使代码工作

        int k = 0;//Cheat to get code working
        foreach (BankAccount BankAccount in a)
        //for (int i = 0; i < a.Length; i++)
        {
            //int z = a.GetEnumerator();
            lstBefore.Items.Add(a[k].show());
            k += 1;//Cheat to get code working
        }
        //if (a[0] is IComparable)
        //{
            //Sort.BubbleSort(a);//Sort a
            k = 0;//Cheat to get code working
            for (int i = 0; i < a.Length; i++)
            {
                lstAfter.Items.Add(a[k].show());
                //else MessageBox.Show("unable to sort");
                k += 1;//Cheat to get code working
            }
        //}
        //else MessageBox.Show("unable to sort");

class Sort : IComparable
{
    public static void BubbleSort(IComparable[] arr)
    {
        bool swap = true;
        IComparable temp;
        for (int i = 0; swap; i++)
        {
            swap = false;
            for (int j = 0; j < (arr.Length - (i + 1)); j++)
            {
                //int test = arr[j].CompareTo(arr[j + 1]);                    
                if (arr[j].CompareTo(arr[j + 1]) > 0)
                //If this balance is < than next balance                    
                {
                    temp = (IComparable)arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                    swap = true;
                }
            }
        }
    }
}

我也有

public class BankAccount : IComparable, IComparable<BankAccount>//Class BackAccount -             //Icomarable    
{
    private decimal balance;
    private string FullName;
    //...

    public int CompareTo(BankAccount that)//Compare To        
    {
        if (this.balance > that.balance) return -1;//If this balance is > than next balance            
        if (this.balance == that.balance) return 0;//If this balance is = to next balance            
        return 1;//If this balance is < than next balance            
        //return this.balance.CompareTo(that.balance);        
    }
}
Thanks,

2 个答案:

答案 0 :(得分:0)

您似乎只需要在CompareTo班级(而不仅仅是Sort班级)中实施BankAccount

答案 1 :(得分:0)

首先,foreach没有任何索引。如果需要索引,请使用for循环 其次,Sort类没有实现IComparable(导致错误)。这是一个比较者,而不是比较。如果您愿意,它可以实现IComparer,或者是静态的 当你使用Array.SortList.Sort方法实现QuickSort并确保更快更好时,为什么要进入冒泡排序实现?我会避免这个。