我在下面有一些代码用于按钮点击事件, 它使用冒泡排序。我有点不清楚 使用。尝试按升序对数组进行排序 订购。另外,我必须使用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,
答案 0 :(得分:0)
您似乎只需要在CompareTo
班级(而不仅仅是Sort
班级)中实施BankAccount
。
答案 1 :(得分:0)
首先,foreach
没有任何索引。如果需要索引,请使用for循环
其次,Sort
类没有实现IComparable
(导致错误)。这是一个比较者,而不是比较。如果您愿意,它可以实现IComparer
,或者是静态的
当你使用Array.Sort
或List.Sort
方法实现QuickSort并确保更快更好时,为什么要进入冒泡排序实现?我会避免这个。