按线程排序

2023-12-14

我有一项任务,需要工作代码。在开始之前我想了解这个问题,但我不知道如何写它。

我有一组数据,以此为例

var arr = new byte[] {5,3,1,7,8,5,3,2,6,7,9,3,2,4,2,1}

我需要将此数组分成两半,将其放入线程池中并递归执行此操作,直到我有

我不明白的是如何合并数组?我是否应该分割数组,将一个线程放入池中并阻塞直到它准备好?我如何获得线程的结果?我假设不可能在不阻塞的情况下合并数组?

这是我到目前为止所拥有的。

    static void Main(string[] args)
    {
        var arr = new byte[] { 5, 3, 1, 7, 8, 5, 3, 2, 6, 7, 9, 3, 2, 4, 2, 1 };
        var newarr = Sort(arr);
        Console.Write(BitConverter.ToString(newarr));
    }
    static byte[] Sort(byte[] arr)
    {
        if (arr.Length <= 2)
            return arr;
        if (arr.Length == 2)
        {
            if (arr[0] > arr[1])
            {
                var t = arr[0];
                arr[0] = arr[1];
                arr[1] = t;
            }
            return arr;
        }

        var arr1 = arr.Take(arr.Length / 2).ToArray();
        var arr2 = arr.Skip(arr1.Count()).ToArray();
        //??
        return arr;
    }

注意:教授确实说过我们可以向其他人寻求帮助。我想我可以不问就解决这个问题,但我想得到最好的答案。线程是我的弱点(我不喜欢其他一切,数据库,二进制 io,Web 界面,只是从来没有复杂的线程)


这似乎是一个并行版本归并排序。您应该使其像递归顺序版本一样工作,但显然将每个递归排序作为单独的任务运行。

在您的任务 API 中,应该有某种方法来等待完成,也许还可以传递结果。这样,您就可以很好地复制传统的归并排序:对于每个子排序,将一个任务放入池中,然后等待两个子任务完成。然后执行合并,并将您自己的结果传回您的调用任务。

如果您只有常规线程 API(即没有真正的任务库),那么我建议您在第三个数组中提供输出:每个线程将有两个输入数组和一个输出数组。如果允许为每个任务创建新线程,则可以通过连接两个子线程来等待任务完成。

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

按线程排序 的相关文章

  • MFC 中位图背景绘制的线程类型

    我有一个 MFC 文档 视图 C 图形应用程序 它将所有绘图都绘制到离屏位图 然后将其复制到 OnDraw 方法中提供的 CDC 指针 在过去的几天里 我一直在寻找将绘图组件放置在单独的工作线程中 这样它就不会停止 GUI 当我执行此操作时
  • 任务并行库周围是否有一个接口包装器,以便我可以将其交换用于单元测试?

    I asked 这个问题 https stackoverflow com questions 3362734 unit testing concurrent software what do you do不久以前 我现在知道这是一个坏主意
  • 首先对列表中最长的项目进行排序

    我正在使用 lambda 来修改排序的行为 sorted list key lambda item item lower len item 对包含元素的列表进行排序A1 A2 A3 A B1 B2 B3 B 结果是A A1 A2 A3 B
  • C++ 异步线程同时运行

    我是 C 11 中线程的新手 我有两个线程 我想让它们同时启动 我可以想到两种方法 如下 然而 似乎它们都没有按照我的预期工作 他们在启动另一个线程之前启动一个线程 任何提示将不胜感激 另一个问题是我正在研究线程队列 所以我会有两个消费者和
  • 在 .NET 并发线程之间传递数据的最佳方式是什么?

    我有两个线程 一个需要轮询一堆单独的静态资源以查找更新 另一种需要获取数据并将其存储在数据库中 线程1如何告诉线程2有东西要处理 如果数据块是独立的 则将数据块视为要由线程池处理的工作项 使用线程池和QueueUserWorkItem将数据
  • 使用 RxJava 限制吞吐量

    我现在遇到的情况很难解释 所以我会写一个更简单的版本来解释这个问题 我有一个Observable from 它发出一系列由ArrayList文件数量 所有这些文件都应上传到服务器 为此 我有一个函数可以完成这项工作并返回一个Observab
  • 查找其索引的乘积可被另一个数字 X 整除的对的数​​量

    给定一个数组和某个值 X 找到满足以下条件的对的数量 i lt j a i a j and i j X 0 Array size lt 10 5 我想这个问题有一段时间了 但只能想出蛮力解决方案 通过检查所有对 这显然会超时 O N 2 t
  • 如何在同一线程中创建JFrame以使其阻塞?

    出于调试目的 我需要在一个简单的窗口中在屏幕上绘制图像 Swing 在单独的消息循环线程中处理所有事件 这意味着如果我执行以下操作 while true Get screenshot BufferedImage screenshot MSW
  • 冻结/挂起 tkinter GUI 等待线程完成

    按下按钮后我的界面冻结了 我正在使用线程 但我不确定为什么仍然挂起 任何帮助将不胜感激 提前致谢 class magic def init self self mainQueue queue Queue def addItem self q
  • 按字母顺序对组合框值进行排序

    我的 Excel 用户表单中有一个组合框 按字母顺序排序的最简单方法是什么 它的值是在 vba 中硬编码的 新的值只是添加到底部 因此它们不按任何顺序排列 当前正在使用用户表单 以便我们的用户可以将数据从我们的数据库导入到 Excel 中
  • 根据另一个列表的顺序对列表进行排序[重复]

    这个问题在这里已经有答案了 我需要对列表进行排序Person对象 List
  • 运行外部进程的非阻塞线程

    我创建了一个 Java GUI 应用程序 它充当许多低级外部进程的包装器 该实用程序按原样运行 但迫切需要一项重大改进 我希望我的外部进程以非阻塞方式运行 这将允许我并行服务其他请求 简而言之 我希望能够在生成数据时处理来自外部进程的数据
  • Play 框架:异步与同步性能

    我有以下代码 def sync Action val t0 System nanoTime Thread sleep 100 val t1 System nanoTime Ok Elapsed time t1 t0 1000000 0 ms
  • Visual Studio 2010 的“线程”窗口中的 和 [Thread Destroyed] 详细信息

    我一直在尝试调试与一个应用程序的线程相关的一些问题 当我附加到应用程序时 我看到一个像这样的窗口 这个名为 Thread Destroyed 的线程是什么 应用程序代码肯定不会写这个名称 这意味着线程的调用堆栈不可用 采集引擎 线程在应用程
  • 如何使用 JAVA 代码以编程方式捕获线程转储?

    我想通过 java 代码生成线程转储 我尝试使用 ThreadMXBean 为此 但我没有以正确的格式获得线程转储 因为我们正在使用jstack命令 请任何人提供一些帮助 他们是否有其他方式获取线程转储 使用任何其他 API 我想要的线程转
  • 使用链表进行堆排序

    我想知道是否有人曾经使用链表进行堆排序 如果他们可以提供代码 我已经能够使用数组进行堆排序 但尝试在链表中进行排序似乎不切实际 而且在你知道的地方很痛苦 我必须为我正在做的项目实现链接列表 任何帮助将不胜感激 我也用C 答案是 你不想在链表
  • 如何在多线程应用程序中安全地填充数据并 Refresh() DataGridView?

    我的应用程序有一个 DataGridView 对象和一个 MousePos 类型的列表 MousePos 是一个自定义类 它保存鼠标 X Y 坐标 类型为 Point 和该位置的运行计数 我有一个线程 System Timers Timer
  • 如何在Java中对对象数组进行字段级别排序以进行等级比较?

    In Java Class StudentProgress String Name String Grade CTOR goes here main class main method StudentProgress arrayofObje
  • 如何在 python 3.x 中操作嵌套字典?

    我被这个问题困扰了 你能解决这个挑战吗 开始了 我们在二级字典中表示一系列比赛中球员的分数 如下所示 match1 player1 57 player2 38 match2 player3 9 player1 42 match3 playe
  • 如何从外语线程调用Python函数(C++)

    我正在开发一个程序 使用 DirectShow 来抓取音频数据 媒体文件 DirectShow 使用线程将音频数据传递给回调 我的程序中的函数 然后我让该回调函数调用另一个函数 Python 中的函数 我使用 Boost Python 来包

随机推荐

  • Jfreechart:在 x 轴上显示周数的天数

    我正在使用 JFreeChart 显示一个月中每一天的值 现在我想让我的 x 轴显示一个月中的几周而不是几天 目前 我的图表的 y 轴值是 double x 轴值是 int Timestamp ts a getTimestamp Doubl
  • PDO - 致命错误:在非对象上调用成员函数 fetch() [重复]

    这个问题在这里已经有答案了 如果我尝试运行以下 PHP 代码 我会得到一个 调用非对象上的成员函数 fetch 你知道为什么吗 我在另一个网站上使用相同的代码 它运行得很好
  • z-index 属性不起作用

    嗨 伙计 我有以下代码 当我单击某个按钮时我不会这样做fadeTo只有内容没有 some tag在这种情况下fadeTo涉及 some tag div div div div content width 100 height 100 out
  • 6000万条条目,精选某月的条目。如何优化数据库?

    我有一个包含 6000 万条条目的数据库 每个条目包含 ID 数据源ID 一些数据 DateTime 我需要选择特定月份的条目 每个月包含大约 200 万个条目 select from Entries where time between
  • Watir Webdriver(0.9.1) 不再打开 Firefox 实例

    在将 Watir Webdriver v0 9 1 用于 Rails 以及 Selenium Webdriver 2 53 1 时 Firefox 在打开时 browser Watir Browser new firefox 被称为 然而现
  • 推荐一种在Java中将同步方法转为异步的更好方法

    类中有一些同步运行的方法 我希望它们异步运行 第一个想法是包装它 并使用 switch 枚举来决定应该调用哪个函数 但对于调用的每个方法 我都需要包装类中的一个新方法和一个新的枚举 它看起来像这样 public class QueuedSh
  • 如何为工作表制作下拉列表

    我的工作簿中共有五张工作表 我的任务是在第一个工作表中创建一个组合列表按钮 该按钮将能够指向其他四个工作表 如果用户选择工作表名称之一 则该按钮将自动激活所选工作表 尽管可能会添加工作表 但不太可能删除工作表 我什至不确定如何让工作表名称显
  • 在 Selenium Android Webdriver 测试中使用 Xpath 和 CSS 查找元素有困难

    我想使用 Selenium WebDriver 自动化 Android Web 应用程序 并且我运行了一个简单的程序来打开 google 页面并搜索术语 当找到具有名称和 ID 的元素时 它运行完美 但是 尝试使用 Xpath 和 Css
  • AVPlayer 播放 m3u8 流时如何捕获图像?

    I use AVPlayer玩一个m3u8文件 我想在这些代码中捕获图像 AVAssetImageGenerator gen AVAssetImageGenerator alloc initWithAsset self player cur
  • Powershell 脚本输出到变量 - 捕获 Write-Host 输出

    使用这个脚本 https github com byterogues powershell bittrex api我从另一个脚本中调用它 e g order bittrex api ps1 action buylimit market BT
  • 使用 forcat::fct_reorder 对 facet_wrap 中的图进行排序

    我有一段时间内国家 地区级别的统计数据 我用facet wrap 按国家 地区绘制 但我想仅根据最新值 2015 按降序排列图 我尝试过使用transform 但这仅对第一个值 2005 进行排序 我认为forcats fct reorde
  • Firebase:removeUser()但需要删除存储在该uid下的数据

    我在用着Firebase并且需要添加一个删除用户 函数可以删除用户帐户 但是数据库中该 uid 下还存储有数据 是否有可能删除用户 函数也可以删除该数据 或者是运行另一个数据的唯一方法Firebase函数 remove 作为回调 谢谢 J
  • 验证具有空属性的 XML 架构

    我在验证 xml 架构时遇到问题 我在架构上遇到这些错误 113 18 s4s elt invalid content 1 AnonType user 的内容是 无效的 164 17 s4s elt invalid content 1 An
  • Excel VBA - 双击时将列中所有选定的单元格大写

    我有一个非常简单的 VBA 脚本 它将所选单元格大写 Private Sub Worksheet BeforeDoubleClick ByVal Target As Range Cancel As Boolean ActiveCell Va
  • 在 iOS 8 上捕获音量增大/减小按钮按下的最简洁方法

    捕获音量增大 减小按钮按下的最佳 最干净的方法是什么iOS 8 理想情况下 我想捕获按键并防止系统音量发生变化 或者至少防止 HUD 显示音量变化 有一些旧的答案使用已弃用的方法 并且似乎在 iOS 8 上根本不起作用 iOS 8 具体一也
  • 在自定义域中部署 Google Endpoint

    使用具有自定义域的 Google Cloud Endpoints 是否存在任何问题 然后我使用了它几个星期 部署后它停止工作 我看这里 我发现这个问题这说明目前还不允许 但这对我有用http www customdomain com ah
  • UML 用例图中是否存在泛化?

    我正在尝试对一些需求进行建模 并且在网上看到了一些带有用例概括的示例 但是UML 2 5 标准审查没有提到用例图中的泛化 或者我找不到它 那么 泛化有标准支持吗 由于用例是一个分类器 因此它们可以被泛化 UML 2 5 规范包含一个示例 如
  • 如何在 Swift 中表示质量大小?

    SI units enum Magnitude Measurement case Milli Measurement 3 ml case Centi Measurement 2 cl case Desi Measurement 1 dl c
  • 在 Javascript 中查找复选框是否获得焦点

    在 Javascript 中 我如何判断复选框是否具有焦点 我认为会有一个名为 isfocused 的方法或属性 但显然不是 我所说的焦点是指他们已经使用键盘切换到它 此时按空格键会选中该框 创建一个连接到 onfocus 事件的事件处理程
  • 按线程排序

    我有一项任务 需要工作代码 在开始之前我想了解这个问题 但我不知道如何写它 我有一组数据 以此为例 var arr new byte 5 3 1 7 8 5 3 2 6 7 9 3 2 4 2 1 我需要将此数组分成两半 将其放入线程池中并