c# - 选择排序算法排序错误

标签 c# algorithm sorting selection-sort

好的,我遇到了选择排序算法的问题。它会很好地对整数进行排序,但是当我尝试将它用于 double 时,它开始随机排序。
这是我的代码

   using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Sorter.ListSort;
using System.Collections;

namespace ConsoleApp20
{
    class Program
    {
        static void Main(string[] args)
        {
            var x = new List<double>();
            x.Add(23.1);
            x.Add(1.5);
            x.Add(3);
            x.Add(15.23);
            x.Add(101.2);
            x.Add(23.35);
            var sorted = selectionSort(x);

            foreach (double s in sorted)
                Console.WriteLine(s);
            Console.ReadLine();
        }

        public static List<double> selectionSort(List<double> data)
        {
            int count = data.Count;
           // Console.WriteLine(count);

            for (int i = 0; i < count - 1; i++)
            {
                int min = i;
                for (int j = i + 1; j < count; j++)
                {


                    if (data[j] < data[min])
                        min = j;

                    double temp = data[min];
                    data[min] = data[i];
                    data[i] = temp;
                }
            }

            return data;
        }
    }
}

现在这是算法返回的内容

enter image description here 我们可以看到 3 不大于 15.23,这是怎么回事?

最佳答案

就像评论中已经提到的 MoreON 一样,您应该在找到最小值后交换元素。

所以它应该是这样的

    public static List<double> selectionSort(List<double> data)
    {
        int count = data.Count;
        // Console.WriteLine(count);

        for (int i = 0; i < count - 1; i++)
        {
            int min = i;
            for (int j = i + 1; j < count; j++)
            {
                if (data[j] < data[min])
                    min = j;
            }
            double temp = data[min];
            data[min] = data[i];
            data[i] = temp;
        }

        return data;
    }

但如果你不想重新发明轮子,你也可以使用:

var sorted = x.OrderBy(o => o).ToList();

关于c# - 选择排序算法排序错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53427131/

相关文章:

c# - 在 C# 项目中使用 Microsoft Bond

C# catch(DataException) - 没有定义变量

c# - Flyout 或 Popup 以显示附加信息

python - 如何将字典+列表组合成一个排序列表

javascript - ngOnInit 内的引用错误

c++ - 仅仅通过修改比较就能使qsort稳定?

c# - C#中涉及集合、泛型和接口(interface)的设计问题

algorithm - "hill climbing"和 "greedy"算法有什么区别?

c - 将偶数带到数组 : How to incorporate corner case elegantly? 前面的算法

algorithm - 列出四面体的所有有趣部分