选择排序从两端开始增长有序范围

2023-12-28

我编写了选择排序的修改版本,其中我考虑数组的最小值和最大值并将它们放在两端

该算法的工作原理如下

1. Find the minimum and the maximum value in the list.
2. Swap the minimum value with the value in the first position.
3. Swap the maximum value with the value in the last position.
4. Repeat the steps above for the remainder of the list 
(starting at the second position and ending at the second to 
 last position and narrowing the range of positions examined 
 from both ends of the array each time).

不幸的是,上面显示了具有重复值的数组的意外结果。

例如,

[9, 37, 12, 1, 13, 31, 5, 37, 36, 29, 19, 22, 20, 15, -1, 23]

被排序为

[-1, 1, 5, 9, 12, 13, 15, 19, 20, 22, 23, 29, 31, 37, 36, 37]

事实上,这里的主要问题是,除了简单的重复项之外,算法通常没有对数组后半部分的元素进行正确的排序。

这是我的伪代码

    int i=0;
    while(i<=(arr.length-i-1)) {
      int minIndex = i;
      int maxIndex=arr.length-i-1; 
      for (int j = i+1; j <=arr.length-i-1; j++) {

       if (arr[j] <=arr[minIndex]) {
         minIndex = j;      
         } 
       if(arr[j]>=arr[maxIndex]){
          maxIndex = j; 
         }
      }
      swap(arr, i, minIndex);
      swap(arr, (arr.length-i-1), maxIndex); 
    i++;
    }

EDIT这是我的代码的交换部分,它是唯一与算法交互的部分。我认为这不会有任何区别,但无论如何我都会将其包括在内

 private static void swap(int[] arr, int oldIndex, int newIndex){

    int temp=arr[oldIndex];
    arr[oldIndex]=arr[newIndex];
    arr[newIndex]=temp;
 }

问题发生时i恰好是maxIndex。要解决这个问题,您需要添加:

swap(arr, i, minIndex);
if(i == maxIndex) {
     maxIndex = minIndex;
}
swap(arr, (arr.length-i-1), maxIndex);

看到它@工作 http://ideone.com/XZFAc

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

选择排序从两端开始增长有序范围 的相关文章

  • ClientRequestFactory RestEasy 已弃用...还有其他 RestEasy 替代方案吗?

    我需要使用其他人创建的 RestService 的接口来创建轻松的客户端 这工作很好 除了一件事 当我从rest easy 2 3 5 Final更新到resteasy 3 0 x时 Client RequestFactory类看起来像 D
  • Vaadin框架播放视频

    我可以使用 Vaadin Framewotk 播放视频吗 主要思想是从本地驱动器加载 flv 或 avi 格式的视频文件 并使用 vaadin 框架在网络上播放 谢谢 Sampler中有一个示例 http demo vaadin com s
  • 如何获取JavaFX的版本号?

    如何在运行时找出我正在使用哪个版本的 JavaFX 简单的方法之一就是简单地阅读javafx properties文件位于您的 JAVA HOME jre lib目录 我现在安装了 Java 1 7 u9 与之捆绑的 JavaFX 是 v2
  • 是否有适用于 Java 的 Harel Statechart DSL 工具?

    我正在寻找一种能够理解 DSL 的工具 在其中我可以定义生成 Java 代码的状态图 或者 DSL 中的状态图可以按原样运行 该工具最好用 Java 编写 并且必须根据 Harel 状态图 或等效的 UML 2 状态机 的定义支持超级状态和
  • 是否可以将 BitmapDescriptor 转换为 Bitmap?

    我需要将 BitmapDescriptor 转换为 Bitmap 我可以使用以下代码将位图转换为 BitmapDescriptor BitmapDescriptor bd BitmapDescriptorFactory fromBitmap
  • 原型组件的 Spring 事件处理

    假设我有两个组件 X 和 Y 其中 X 是单例 而 Y 不是 当我发布XUpdateEvent时 没有问题 我可以捕获该事件 但是 对于 YUpdateEvent 我无法捕获事件 Spring 为每个触发的事件创建新实例 而不是使用已经创建
  • Java RCP/SWT - Eclipse RCP 中的“Android Toast like”对话框

    有谁知道是否存在某些弹出窗口的实现 例如 Android TOAST 通知是以下内容的一部分迈林公共区 https projects eclipse org projects mylyn commons 要集成它们 请添加Mylyn Com
  • 为什么在java中加载JNI是在静态初始化程序中完成的?

    在许多使用 JNI 的示例中 我看到类似以下内容 class SampleClass static System loadLibrary somelib 这种特殊语法的目的是什么 为什么使用这个 而不仅仅是在类构造函数或类似的东西中 我想你
  • 如何在 TestNG 报告中包含 Log4j2 消息

    我希望在所有测试用例的 TestNG 报告中提供 Log4j2 日志记录信息 TestNG 使用一个名为 Reporter java 的特殊记录器类来跟踪日志输出并将其保存在其结果 XML 中 在 log4j 中 可以简单地创建一个路由到
  • java - IBM-IEEE 双精度浮点字节转换

    我需要在 Java 中对字节数组进行 IBM IEEE 浮点转换 我能够使用成功地进行单精度浮点字节的转换http www thecodingforums com threads c code for converting ibm 370
  • 结果显示图像上有衬里

    我正在使用 opencv 和 android ndk 下面是我的 jni 代码 void Vignete Mat img1 Mat img2 Mat out resize img1 img1 img2 size img1 convertTo
  • Java 线程 JavaDoc

    我编写了一个只能在特定线程上调用的方法 是否应该将标准注释或注释添加到方法的 javadoc 中来表示这一点 不知道有任何这样的标准注释 Java 并发实践 http www javaconcurrencyinpractice com 在第
  • ImageIO read() 和 write() 操作后 GIF 图像变得错误

    我有这个代码 它只是读取 GIF 文件 用背景重新绘制它 然后输出到新的 GIF 文件 问题是结果文件变得奇怪 我不知道为什么它的质量变得很差 JPG 文件不会出现此问题 如何修复它 import java awt Color import
  • 如何在 Jersey RESTful Web 服务中放置 cookie?

    我想通过 Jersey API 将 cookie 从 PUT webservice result 放置到 POST webservice 这是我的代码 WebResource service1 client resource http te
  • 参数列表中的“...”是什么意思? doInBackground(字符串...参数)

    我不明白那个语法 尝试用谷歌搜索各种单词加上 是没有用的 它被称为varargs http java sun com j2se 1 5 0 docs guide language varargs html 这个事实应该产生更好的谷歌结果 h
  • JNA Windows 服务启动类型

    我一直在使用 JNA 并且能够使用下面的代码返回 Windows 服务的状态 即启动或停止 但我不确定如何返回服务的启动类型 我确信 JNA 之外还有其他方法 但如果可能的话我想继续使用 JNA import com sun jna imp
  • 如何指示 yum 安装特定版本的 OpenJDK

    我尝试安装openjdk in the redhat服务器 如何安装指定版本 我要安装的版本是 11 0 4 使用以下命令安装的版本是11 0 6 yum install java 11 openjdk devel 曾与 yum showd
  • 来自 Janino 和 Commons-Compiler 的 Spark java.lang.NoSuchMethodError

    我正在构建一个使用 Spark 进行基于随机森林分类的 应用程序 当尝试运行该程序时 我从该行收到异常 StringIndexerModel labelIndexer new StringIndexer setInputCol label
  • 为什么在 this 方法中添加 If 语句会大大降低速度?

    我在中遇到过这个回答另一个问题 https stackoverflow com questions 12233594 faster way to apply alpha to a jpeg in an android app 我试图诊断哪些
  • 如何将 Hibernate 5 安装到 Apache Karaf v4 中

    我已经安装了 Apache Karaf v4 03 并查询了 Hibernate 的可用功能列表 如下所示 不幸的是 我使用的是 Hibernate v5 hibernate 3 3 2 GA Uninstalled enterprise

随机推荐

  • OllyDbg 中的左下窗格显示什么?

    我使用 NASM 组装了以下代码 global start section data var1 DD 0xA1A2A3A4 4 bytes var2 DD 0xB1B2B3B4 4 bytes section bss var3 RESD 1
  • 使用Officer 除了Word docx 之外还创建pdf

    我在循环中使用官员 过去使用记者 来创建 150 个独特的文档 然而 我需要将这些文档从 R 导出为 word docx 和 pdf 有没有办法将用officer创建的文档导出为pdf 这是可能的 但我的解决方案取决于 libreoffic
  • 使用 Alamofire/Codable 解析 JSON 行

    是否可以使用 Alamofire 和 codable 解析 JSON 行 这是我现在的代码 Alamofire request url method get parameters parameters encoding URLEncodin
  • 无法将属性“溢出”设置为 null

    webView getSettings setJavaScriptEnabled true webView加载这个html代码
  • 自动向下滚动聊天div

    我有这个代码 用于加载聊天 function getMessages letter var div messages get msg show php function data div html data setInterval getM
  • C++ 跨平台高分辨率定时器

    我正在寻找用 C 实现一个简单的计时器机制 该代码应该可以在 Windows 和 Linux 中运行 分辨率应尽可能精确 至少毫秒精度 这将用于简单地跟踪时间的流逝 而不是实现任何类型的事件驱动设计 实现这一目标的最佳工具是什么 更新了一个
  • 一个简单的java多线程

    嗯 我遇到了一个奇怪的问题 public class Test private boolean state new boolean false false public void createThread Thread th1 new Th
  • ng build -prod 与 ng build --prod --build-optimizer=true

    我的 Angular 项目是 Angular4 3 3 ng 构建产品 构建需要 77 秒 ng build prod build optimizer true 构建需要 190 秒 没有供应商块 大小更小 但大小差异不大 Chunk di
  • Angular2 - ContentChild 查询找不到嵌套组件

    我正在尝试设置一个 Angular2 组件 该组件自动聚焦通过内容投影插入的输入元素 我使用的解决方案基于这个答案 https stackoverflow com a 34503163 1592971 我还有一个额外要求 即输入元素可以嵌套
  • 如何检查服务器是否发送垃圾邮件?

    我今天检查了我的 IP 地址 因为我收到了退回的电子邮件 并且我发现它已被列入一些列表的黑名单 我只使用我的网站发送客户电子邮件 不发送时事通讯电子邮件 所以我不会发送很多电子邮件 我不知道为什么我的专用IP地址会被列入黑名单 有没有办法检
  • 如何检查是否安装了 .net for excel 互操作性

    我在代码中使用 net Primary Interoperability Assembly for Excel 但是 该应用程序可以在未安装 net PIA for Excel 的计算机上运行 我想如果没有安装就给出错误信息 即使我正在检查
  • FAILED_NOT_VISIBLE 负载平衡中 Google 管理的 SSL 证书

    我正在与负载平衡合作 将 https 连接到我的静态网站 并且我在 GoDaddy 中拥有我的域名 在初始阶段 我只有 Http 所以我用指向 c storage googleapis com 的 cname 绘制了我的域名 并用域名进行存
  • Google 地图 API 函数 map.getCenter()

    当用户调整地图时 我将 Google Map API 设置的缩放和位置保存在 cookie 中 当他们回来时 地图位于同一个地方 该函数大部分时间都有效 var h JSON stringify map getCenter null 2 j
  • 无法将 FFmpeg C 库移植到 android 中

    我到底想要做什么 访问ffmpeg c文件来修改int main int argc char argv 功能为JNI并将 ffmpeg 命令作为字符串传递 我尝试将 ffmpeg C 库移植到 android ARM 处理器 我遵循了不同的
  • 新部署上的 System.Web.AspNetHostingPermission 异常

    我有一个朋友正在将 Web 应用程序从一台服务器转移到另一台服务器 新服务器的设置与第一台服务器相同 但是 他遇到了安全问题 这是错误详细信息 请求 System Web AspNetHostingPermission System Ver
  • 为我的 MVC 应用程序创建服务层?

    据我了解 MVC 通过控制器这一 粘合剂 将类定义 模型 与表示 视图 分开 控制器应该有单一的职责 因此是可测试的 ViewModel 用于将来自多个实体的数据汇集在一起 并 按摩 来自视图控制器的数据 似乎业务逻辑并没有真正占有一席之地
  • 父 MOC 从子 MOC 获取空数据的更改

    我陷入了 CoreData 和父子 MOC 的这个问题 将对象添加到子 MOC 保存它们并保存父 MOC 时 所有对象的属性都会重置为 defaultValue 我在此处粘贴了两个 MOC 的日志 特别是这些日志中重置的 stringAtt
  • 如何为 Hanami 应用程序配置 Puma?

    我有一个 Hanami 1 3 3 应用程序 它应该与 Puma 作为生产网络服务器一起运行 我想在集群模式下使用 puma 并正确使用 preload app 现在我正在努力寻找正确的 Puma 配置 我知道 每个子进程 工作进程 都必须
  • 如何检测未使用的宏定义和 typedef?

    通过链接器反馈很容易获得未使用的函数和变量的列表 但如何检测这些未使用的宏定义和 typedef 我必须在整个项目中逐行浏览代码和 git grep 吗 对于源文件中定义的宏 您可以尝试 Wunused macrosgcc clang 标志
  • 选择排序从两端开始增长有序范围

    我编写了选择排序的修改版本 其中我考虑数组的最小值和最大值并将它们放在两端 该算法的工作原理如下 1 Find the minimum and the maximum value in the list 2 Swap the minimum