我必须对选择排序进行编码,并且我以前使用了Array,但它工作得很好,但是文本文件太大,无法使用Array,因此我不得不将代码转换为ArrayList。现在发生的是,(也有大型文本文件)多数数已排序,但在排序后的数字之间有一些未排序的数字,认为这可能是重复错误... 我尝试更改为降序,并且它执行相同的操作。我使用了一个较小的文本文件来显示输出。所有相关方法如下。
public void SelectionSort() // ascending order
{
for (int i = 1; i <= List.Count; i++) // go through the list
{
ListClass minimum = (ListClass)List[i-1];
int min = i - 1;
for (int j = i;j <= List.Count-1; j++)
{
ListClass cur = (ListClass)List[j];
if (minimum.getNum() > cur.getNum())
min = j; // min equals smallest in list j
}
swap(List, i-1, min);
}
Console.WriteLine("Array after selection sort: ");
foreach (ListClass cur in List)
{
cur.Display();
}
public static void swap(ArrayList List, int x, int y)
{
object temp = List[x];
List[x] = List[y];
List[y] = temp;
}
public void Display()
{
foreach (ListClass cur in List)
{
cur.Display();
}
}
排序前的数组:1 2 5 7 8 90 889 88 654 33 2 3选择后的数组:1 2 3 5 7 8 90 2 88 33 654 889
答案 0 :(得分:2)
您不应该将未排序部分的最小值与最后排序的值进行比较,然后将其交换,而只需查找未排序部分的最小值并将其与第一个未排序的值交换(与最后排序的值相邻) )。