选择排序与索引的问题

2023-12-05

实际上我正在处理 CodeAbbey 问题,所以我不想将答案作为代码,而是对此进行解释,我做错了什么。http://www.codeabbey.com/index/task_view/selection-sort

我的选择排序实际上可以正常工作,没有任何问题,但我不知道为什么我没有获得正确的索引(当排序有效时!)。 IE。对于输入数据:5 1 3 6 2 4 7 9 8 0我把它排序为0 1 2 3 4 5 6 7 8 9,如我所愿。

这是代码:

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

namespace SelectionSort
{
    class Program
    {
        static void Main(string[] args)
        {
        int howMany = int.Parse(Console.ReadLine()); //length of array
        List<int> Base = new List<int>(Array.ConvertAll(Console.ReadLine().Split(), int.Parse)); //input to array (i.e. 5 1 3 6 2 4 7 9 8 0 => { 5, 1, 3, 6, 2, 4, 7, 9, 8, 0 })
        List<int> Output = new List<int>(); // list to store sorted array

        string[] ans = new string[howMany];   // array for storing answers

        int loops = Base.Count();

        for(int i = 0; i != loops; i++)
        {
            int topID = 0, topValue = 0;
            for(int j = 0; j != Base.Count(); j++)
            {
                if (j == 0)
                {
                    topID = 0;
                    topValue = Base[0];
                }
                else
                {
                    if(topValue < Base[j])
                    {
                        topValue = Base[j];
                        topID = j;   
                    }
                }
            }
            ans[i] = topID.ToString();  //after looping through array save topID to answer array
            Output.Add(Base[topID]);    //add topValue to output
            Base.RemoveAt(topID);       //remove topValue with index topID from list
        }

        //Output.Reverse();                 // Writing on stdout
        //foreach(var s in Output)          // sorted array
        //{                                 //
        //    Console.Write(s + " ");       // It works without any problems
        //}                                 //
        //Console.ReadLine();               //

        foreach(var s in ans)
        {
            Console.Write(s + " ");    // write on stdout stored indexes
        }
        Console.ReadLine();
    }

  }
}

IE。对于这样的测试数据:

124 144 146 4 121 106 142 153 168 122 42 135 127 126 16 193 52 29 161 186 83 152 72 51 125 37 116 187 133 183 132 80 53 185 129 7 189 98 128 32 33 56 157 49 50 10 77 11 196 160 162 68 43 14 181 112 113 94 100 165 79 172 159 156 57 9 6 66 86 17 63 46 178 130 88 192 124 105 182 34 18 76 155 24 89 123 12 179 109 188 13 40 5 163 45 27 85 103 93 69 58 25 81 145 92 30 138 154 177 158 140 91 171 139 67 175 184 120 8 54 147 84 174 95 55

我把它排序为:4 5 6 7 8 9 10 11 12 13 14 16 17 18 24 25 27 29 30 32 33 34 37 40 42 43 45 46 49 50 51 52 53 54 55 56 57 58 63 66 67 68 69 72 76 77 79 80 81 83 84 85 86 88 89 91 92 93 94 95 98 100 103 105 106 109 112 113 116 120 121 122 123 124 125 126 127 128 129 130 132 133 135 138 139 140 142 144 145 146 147 152 153 154 155 156 157 158 159 160 161 162 163 165 168 171 172 174 175 177 178 179 181 182 183 184 185 186 187 188 189 192 193 196

我得到了这样的索引:47 14 72 34 84 25 17 29 107 25 69 46 76 63 94 100 105 52 96 7 49 76 41 15 39 47 86 33 46 61 82 6 15 87 1 75 0 3 76 77 75 5 16 16 46 18 20 5 5 11 42 48 3 1 64 10 26 25 44 1 36 48 25 12 58 23 45 49 50 37 32 28 41 49 5 43 8 21 16 29 5 35 16 37 21 22 32 18 11 34 33 7 3 4 9 8 15 22 10 1 18 3 12 5 4 17 2 14 14 10 9 8 1 4 7 6 3 2 2 4 1 1 1 0

当我应该得到这些时:47 14 74 35 88 26 18 32 115 28 77 53 86 71 107 28 74 60 86 7 58 92 49 17 48 61 28 41 62 81 60 6 20 88 1 6 0 5 74 53 5 10 27 29 72 33 37 11 12 23 12 53 8 3 32 25 55 54 0 4 11 41 57 36 14 56 28 56 8 5 12 8 41 35 19 19 30 14 45 29 21 28 35 37 5 32 19 11 19 30 26 31 15 22 21 28 3 11 19 9 6 9 11 5 15 7 16 3 3 10 12 3 3 8 1 6 6 3 4 3 1 0 1

我究竟做错了什么? 问候


很快,您就没有遵循预期的算法,因此出现了差异。

期望是exchange在每个步骤中找到的最大元素与当前最后一个元素,并且您已经通过不同的方式实现了它removing找到的最大元素。虽然这会产生正确的排序输出,但索引不同(RemoveAt在删除索引后重新定位所有索引)。

为了获得预期的结果,请完全按照问题描述中的描述实现算法。

或者将上述实现更正如下:

Replace

for(int j = 0; j != Base.Count(); j++)

with

int lastID = Base.Count - 1 - i;
for (int j = 0; j <= lastID; j++)

然后替换

Base.RemoveAt(topID);

with

Base[topID] = Base[lastID];
Base[lastID] = topValue;

你就完成了。

另请注意,这是inplace算法,最后Base列表将包含排序结果,因此Output列表是多余的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

选择排序与索引的问题 的相关文章

  • 为什么 int8_t 和用户通过 cin 输入显示奇怪的结果[重复]

    这个问题在这里已经有答案了 一小段代码让我发疯 但希望你能阻止我跳出窗外 看这里 include
  • 确保 StreamReader 不会挂起等待数据

    下面的代码读取从 tcp 客户端流读取的所有内容 并且在下一次迭代中它将仅位于 Read 上 我假设正在等待数据 我如何确保它不会在没有任何内容可供读取时返回 我是否必须设置低超时 并在失败时响应异常 或者有更好的办法吗 TcpClient
  • 在 DataView 的 RowFilter 中选择 DISTINCT

    我试图根据与另一个表的关系缩小 DataView 中的行范围 我使用的 RowFilter 如下 dv new DataView myDS myTable id IN SELECT DISTINCT parentID FROM myOthe
  • C中的malloc内存分配方案

    我在 C 中尝试使用 malloc 发现 malloc 在分配了一些内存后浪费了一些空间 下面是我用来测试 malloc 的一段代码 include
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • 如何区分用户点击链接和页面自动重定向?

    拥有 C WebBrowser control http msdn microsoft com en us library system windows forms webbrowser aspx在我的 WinForms 应用程序中 并意识
  • 获取两个工作日之间的天数差异

    这听起来很简单 但我不明白其中的意义 那么获取两次之间的天数的最简单方法是什么DayOfWeeks当第一个是起点时 如果下一个工作日较早 则应考虑在下周 The DayOfWeek 枚举 http 20 20 5B1 5D 3a 20htt
  • 使用接口有什么好处?

    使用接口有什么用 我听说它用来代替多重继承 并且还可以用它来完成数据隐藏 还有其他优点吗 哪些地方使用了接口 程序员如何识别需要该接口 有什么区别explicit interface implementation and implicit
  • 回发后刷新时提示确认表单重新提交。我做错了什么?

    我有一个以空白 默认状态启动的仪表板 我让用户能够将保存的状态加载到仪表板中 当他们单击 应用 按钮时 我运行以下代码 function CloseAndSave var radUpload find radUpload1ID var in
  • 将 Word 文档另存为图像

    我正在使用下面的代码将 Word 文档转换为图像文件 但是图片显得太大 内容不适合 有没有办法渲染图片或将图片保存到合适的尺寸 private void btnConvert Click object sender EventArgs e
  • 为什么调用非 const 成员函数而不是 const 成员函数?

    为了我的目的 我尝试包装一些类似于 Qt 共享数据指针的东西 经过测试 我发现当应该调用 const 函数时 会选择它的非 const 版本 我正在使用 C 0x 选项进行编译 这是一个最小的代码 struct Data int x con
  • 如何检测表单的任何控件的变化?

    如何检测 C 中表单的任何控件的更改 由于我在一个表单上有许多控件 并且如果表单中的任何控件值发生更改 我需要禁用按钮 我正在寻找一些内置函数 事件处理程序 属性 并且不想为此创建自定义函数 不 我不知道任何时候都会触发任何事件any控制表
  • Qt - ubuntu中的串口名称

    我在 Ubuntu 上查找串行端口名称时遇到问题 如您所知 为了在 Windows 上读取串口 我们可以使用以下代码 serial gt setPortName com3 但是当我在 Ubuntu 上编译这段代码时 我无法使用这段代码 se
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • AES 128 CBC 蒙特卡罗测试

    我正在 AES 128 CBC 上执行 MCT 如中所述http csrc nist gov groups STM cavp documents aes AESAVS pdf http csrc nist gov groups STM ca
  • “接口”类似于 boost::bind 的语义

    我希望能够将 Java 的接口语义与 C 结合起来 起初 我用过boost signal为给定事件回调显式注册的成员函数 这非常有效 但后来我发现一些函数回调池是相关的 因此将它们抽象出来并立即注册所有实例的相关回调是有意义的 但我了解到的
  • 为什么 gcc 抱怨“错误:模板参数 '0' 的类型 'intT' 取决于模板参数”?

    我的编译器是gcc 4 9 0 以下代码无法编译 template
  • 我的班级应该订阅自己的公共活动吗?

    我正在使用 C 3 0 遵循标准事件模式我有 public event EventHandler
  • 如何从 ODBC 连接获取可用表的列表?

    在 Excel 中 我可以转到 数据 gt 导入外部数据 gt 导入数据 然后选择要使用的数据源 然后在提供登录信息后 它会给我一个表格列表 我想知道如何使用 C 以编程方式获取该列表 您正在查询什么类型的数据源 SQL 服务器 使用权 看
  • 如何将 PostgreSql 与 EntityFramework 6.0.2 集成? [复制]

    这个问题在这里已经有答案了 我收到以下错误 实体框架提供程序类型的 实例 成员 Npgsql NpgsqlServices Npgsql 版本 2 0 14 2 文化 中性 PublicKeyToken 5d8b90d52f46fda7 没

随机推荐

  • TypeScript 实用程序类型优于可区分的联合类型

    给定一个像这样的受歧视联合类型 type HomeRoute name Home type PageRoute name Page id number type SearchRoute name Search text string lim
  • 如果您可以解码 JWT,它们的安全性如何?

    如果我得到一个JWT我可以解码有效负载 这如何安全 难道我不能从标头中获取令牌 解码并更改有效负载中的用户信息 然后使用相同的正确编码秘密将其发送回来吗 我知道它们必须是安全的 但我真的很想了解这些技术 我缺少什么 JWT 可以进行签名 加
  • 从 VBA 运行 Telnet 会话

    我有一个可以执行 FTP 功能的 VBA 库 我也想执行 telnet 操作 目前 我正在编写一个 Perl 脚本 该脚本基于文本文件执行 telnet 但我想从 VBA 内部本地驱动 telnet 连接 有人有这方面的资料吗 我不想使用加
  • 如何使用依赖属性来替换UserControl构造函数中的参数?

    我注意到以前有人问过类似的问题 但我没有找到任何详细的例子 我有一个winform程序 它的构造函数有一个参数cn public AddFailure ProSimConnect cn constructor in winform this
  • 为什么BFS的复杂度是O(V+E)而不是O(E)? [复制]

    这个问题在这里已经有答案了 这是一个通用的 BFS 实现 For a connected graph with V nodes and E total number of edges we know that every edge will
  • 自定义GridView删除按钮

    如何自定义自动生成的命令按钮 例如Delete 我想在删除时添加客户端确认 同时我希望在设置时生成此按钮AutoGenerateDeleteButton true 是否可以 我可以这样添加自定义按钮
  • 您请求的商品无法购买

    我正在尝试在 Android 应用程序中测试订阅 我用地下城的例子 我上传的 apk 未发布 但订阅项目已发布 我在开发控制台中添加了新的测试帐户 gmail 它不是开发人员帐户 我将手机重置为出厂状态并添加了测试帐户 我安装了签名的apk
  • 如何从以破折号开头的远程名称中提取

    在 git 中 可以使用以下命令处理远程名称 人物明星 例如 我们可以添加一个以 只需使用选项更新它 在 git 命令中 命令选项和远程名称之间分开 但它不起作用 git pull myremotename master 而且 我收到此错误
  • 将 pandas 系列时间戳转换为唯一日期列表

    我在 pandas 数据框中有一列时间戳格式的列 想要将唯一日期 没有时间 提取到列表中 我尝试了以下方法并没有真正起作用 1 dates datetime datetime df EventTime tolist date 2 dates
  • 从 Google 应用脚本访问 Google 文档评论

    我正在与几个人同时编写谷歌文档 为了跟踪谁必须做什么 我正在使用评论 然后 文档的每个部分都会分配给某人 并且他必须在评论中更新其部分的状态 以结构化格式 感谢 VBA 中的宏 我将其提取出来并将结果放入电子表格中 这样就可以轻松跟踪文档的
  • 具有一个或多个(多个)参数的搜索表单

    我已经掌握了基础知识 在其中创建了两个文件 用户输入搜索参数的搜索表单 以及生成输入项目的结果文件 为了简单起见 我们将搜索表单文件指定为 search php 将结果页面指定为 results php 搜索 php
  • Java8 Collections.sort(有时)不会对 JPA 返回的列表进行排序

    Java8 在我的 JPA EclipseLink 2 5 2 环境中不断执行奇怪的操作 我不得不删除这个问题https stackoverflow com questions 26806183 java 8 sorting behavio
  • 在聚焦的输入上按空格键并输入“单击”。如何禁用此行为?

    在 Chrome 和 Firefox 也许还有其他 中 如果您有一个输入焦点 按 空格 和 Enter 即可为您单击它们 我正在制作一个 HTML 5 游戏 我想重写空格和输入在焦点上的反应方式 但默认行为妨碍了我 有没有办法在大多数浏览器
  • 使用 CNN 进行二值图像分类 - 选择“负”数据集的最佳实践? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 假设我想训练一个 CNN 来检测图像是否是汽车 选择 Not Car 数据集的最佳实践或方法有哪些 因为这个数据集可能是无限的 基本上是除汽车以外的任何东西 是否有关于数据集需要
  • 通过 Spring MVC 框架包含其他 JSP 是一个好主意吗?

    这是一个模糊而宏大的问题 但希望我能用尽可能少的具体例子来解释它 我们最近改用 Spring MVC 作为我们的应用程序框架 但在开发过程中发现了一个 实际上只有一个 限制因素 如何使用适当的模型包含动态视图 例如 我们正在创建一个包含可重
  • 安装了 SQL Server 2008,但运行版本仍然是 2005

    不久前 我在一台开发计算机上安装了 SQL Server 2008 该计算机已经从 Visual Studio 中安装了 Sql Server 2005 Express 当我查看程序时 我看到 Microsoft Sql Server 20
  • 将 jdb 附加到未捕获的异常

    所以 我正在启动一个 Java 程序 如下所示 java agentlib jdwp transport dt socket address 8000 server y suspend n MyClass 然后我手动附加一个调试器 如下所示
  • 如何在Dialogflow中的对话之间保存数据?

    我不明白你应该如何保存数据 我尝试使用 let conv agent conv conv data data1 mydata to save mydata conv data data1 to load agent add conv 但它使
  • NSNumber 给出错误的 int 值

    我有一个获取 cookie 的程序 此 cookie 的一个参数是 NSNumber 所以我将其保存到数据库中 sqlite3 bind int addStmt 2 HEREisNSNUMBER 将该值保存为 cookieObj creat
  • 选择排序与索引的问题

    实际上我正在处理 CodeAbbey 问题 所以我不想将答案作为代码 而是对此进行解释 我做错了什么 http www codeabbey com index task view selection sort 我的选择排序实际上可以正常工作