选择排序算法排序错误

Selection-sort algorithm sorting wrong

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

   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;
        }
    }
}

现在这就是算法返回的内容

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

您需要更改 int min

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

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

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

就像评论中已经提到的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();

添加一个名为 swap 的新方法并使用以下选择排序代码。

void swap(int *a,int*b){
    int temp=*a;
    *a=*b;
    *b=temp;
}

void selectionSort(int arr[],int n){
int min_index;
for(int i=0;i<n-1;i++)
{
    min_index=i;
    for(int j=i+1;j<n;j++)
    {
        if(arr[j]<arr[min_index])
            min_index=j;
    }
    swap(&arr[min_index],&arr[i]);
}
}