【问题标题】:ArrayList sorting incorrect order; Selection SortArrayList 排序顺序不正确;选择排序
【发布时间】:2019-09-16 22:11:55
【问题描述】:

我必须编写选择排序代码,我之前使用了一个数组,它工作得很好,但是文本文件太大而无法使用数组,所以我不得不将代码转换为 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

【问题讨论】:

  • 为什么不使用List&lt;T&gt;.Sort?还是Array.Sort
  • 我认为更新“min”时需要更新“minimum”变量。否则,您将继续与原始值进行比较。
  • 不要使用 ArrayLists。几年以来,它们已被弃用。 List 不仅提供排序,还提供类型安全(因此您不需要强制转换)和更好的性能。

标签: c# sorting arraylist


【解决方案1】:

您不应该将未排序部分的最小值与最后一个排序值进行比较并将其交换,您只需找到未排序部分的最小值并将其与第一个未排序值交换(在最后一个排序值旁边) )。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 2021-09-01
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多