首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择排序算法排序错误

选择排序算法排序错误
EN

Stack Overflow用户
提问于 2018-11-22 08:57:27
回答 3查看 194关注 0票数 1

好的,我对选择排序算法有问题。它会对ints进行排序,但是当我尝试加倍使用它时,它就开始随机排序了。

这是我的密码

代码语言:javascript
复制
   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,发生了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-11-22 09:24:06

与注释中已经提到的MoreON一样,您应该在找到min值之后交换元素。

所以应该是这样的

代码语言:javascript
复制
    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;
    }

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

代码语言:javascript
复制
var sorted = x.OrderBy(o => o).ToList();
票数 1
EN

Stack Overflow用户

发布于 2018-11-22 09:19:37

您需要更改int min的位置。

代码语言:javascript
复制
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;
    }
}
票数 0
EN

Stack Overflow用户

发布于 2022-03-31 14:36:44

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

代码语言:javascript
复制
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]);
}
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53427131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档