我必须对代码进行选择排序,而且我以前使用的是数组,它工作得很好,但是文本文件太大了,无法使用数组,所以我必须将代码转换为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
发布于 2019-04-28 04:51:17
您不应该将未排序部分的最小值与最后一个排序值进行比较并将其交换,您只需找到未排序部分的最小值并将其与第一个未排序的值(位于最后一个排序值的旁边)交换。
https://stackoverflow.com/questions/55883825
复制相似问题