我叫:希尔排序【JAVA】

1.我兄弟存在的问题

2.毛遂自荐 

希尔排序提希尔(Donald Shell)于1959年提出的一种排序算法。

希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法

希尔排序是基于插入排序的以下两点性质而提出改进方法的:

  • 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率;
  • 但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位;

3.了解一下我的思想 

先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录"基本有序"时,再对全体记录进行依次直接插入排序

 

4.交换法之详细分步 

public static void shellSort(int[] array) {//第一轮10/2=5,分5组for (int i = 5; i < array.length; i++) {for (int j = i - 5; j >= 0; j -= 5) {if (array[j] > array[j + 5]) {int temp = array[j];array[j] = array[j + 5];array[j + 5] = temp;}}}System.out.println("一轮后:" + Arrays.toString(array));//第二轮 5/2=2.分两组for (int i = 2; i < array.length; i++) {for (int j = i - 2; j >= 0; j -= 2) {if (array[j] > array[j + 2]) {int temp = array[j];array[j] = array[j + 2];array[j + 2] = temp;}}}System.out.println("二轮后:" + Arrays.toString(array));//第三轮 2/2=1.分一组for (int i=1;i< array.length;i++){for (int j=i-1;j>=0;j-=1){if (array[j]>array[j+1]){int temp=array[j];array[j]=array[j+1];array[j+1]=temp;}}}System.out.println("一轮后:"+Arrays.toString(array));}}

5.验证一下 

        int[] array = new int[]{8, 9, 1, 7, 2, 3, 5, 4, 6, 0};shellSort(array);

6.交换法之归一   

  public static void shellSort(int[] array) {for (int gap = array.length / 2; gap > 0; gap /= 2) {//gap分组//分组:共有array.length / 2 组for (int i = gap; i < array.length; i++) {//冒泡比较for (int j = i - gap; j >= 0; j -= gap) {//gap步长//比较if (array[j] > array[j + gap]) {int temp = array[j];array[j] = array[j + gap];array[j + gap] = temp;}}}}}

7. 令人惊叹的移位法

 public static void shellSort(int[] array) {for (int gap = array.length / 2; gap > 0; gap /= 2) {//从第gap个元素开始逐个对其所在的组进行直接插入for (int i = gap; i < array.length; i++) {int j = i;int temp = array[j];if (array[j] < array[j - gap]) {while (j - gap >= 0 && temp < array[j - gap]) {//开始移动,而非交换array[j] = array[j - gap];j -= gap;}//退出while即找到位置array[j] = temp;}}}}

8.看一下的时间 

        int[] arr = new int[80000];for (int i = 0; i < arr.length; i++) {arr[i] = (int) (Math.random() * 8000000);}long start = System.currentTimeMillis();shellSort(arr);long end = System.currentTimeMillis();System.out.println("共需:" + (end - start) + "毫秒");

 共需:12毫秒!!!!注意是80w数据啊!!!!amazing~~~~~~~ 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/169743.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快速掌握Pyqt5的5种布局

在PyQt5中&#xff0c;布局管理器是用来控制窗口中控件&#xff08;widgets&#xff09;的位置和大小的。使用布局管理器而不是手动定位控件可以让界面自动适应不同的窗口大小和显示设置。PyQt5提供了多种布局管理器来满足不同的布局需求。 1. 水平布局&#xff08;QHBoxLayou…

postman和Jmeter做接口测试的区别(经验之谈)

接口测试的目的 API 测试作为集成测试的一部分&#xff0c;经过被测应用的接口&#xff08;API&#xff09;来确定是否在功能、可靠性、性能和安全方面达到预期的软件测试。因为 API 都没有 GUI 界面&#xff0c;API 测试都是在通信层进行的。 1.建立接口用例集 Postman功能…

第十八章 解读pytorch优化器与学习率设置(工具)

简介与解读基本概念 学习率对于模型训练效果来说相当重要。 学习率过低会导致学习速度太慢&#xff0c;学习率过高又容易导致难以收敛。 因此&#xff0c;很多炼丹师都会采用动态调整学习率的方法。刚开始训练时&#xff0c;学习率大一点&#xff0c;以加快学习速度&#xf…

2016年11月10日 Go生态洞察:七年的Go语言旅程

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

面试必问:如何快速定位BUG?BUG定位技巧及N板斧!

01 定位问题的重要性 很多测试人员可能会说&#xff0c;我的职责就是找到bug&#xff0c;至于找原因并修复&#xff0c;那是开发的事情&#xff0c;关我什么事&#xff1f; 好&#xff0c;我的回答是&#xff0c;如果您只想做一个测试人员最基本最本分的事情&#xff0c;那么可…

大数据-之LibrA数据库系统告警处理(ALM-37005 GTM进程异常)

告警解释 当出现如下情况时&#xff0c;产生该告警&#xff1a; GTM实例数据目录中的gtm.conf配置文件不存在或者其中某个配置参数不正确时。GTM实例服务线程无法监听IP&#xff0c;或者无法绑定监听端口。GTM实例进程没有其数据目录读写权限时。 告警属性 告警ID 告警级别…

如何取消thunar为默认文件管理器

apt-get install thunark安装之后&#xff0c;导致其他软件&#xff08;例如vscode&#xff09;里文件右键"打开所在的文件夹"时&#xff0c;会默认使用thunar&#xff0c;如何恢复系统默认的Nautilus&#xff1a; 参考1 exo-preferred-applications进入Utilities选…

FPGA模块——SPI协议(读写FLASH)

FPGA模块——SPI协议&#xff08;读写FLASH&#xff09; &#xff08;1&#xff09;FLASH芯片 W25Q16BV&#xff08;2&#xff09;SPI协议&#xff08;3&#xff09;芯片部分命令1.Write Enable&#xff08;06h&#xff09;2.Chip Erase (C7h / 60h)3.写指令&#xff08;02h&am…

3.前端--HTML标签2【2023.11.25】

1.HTML常用标签(文本图像链接&#xff09; 文本标签 标题 <h1> - <h6> 段落<p> 我是一个段落标签 </p> 换行 <br /> <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta ht…

js无法请求后端接口,别的都可以?

在每个接口的控制器中加入以下代码即可&#xff1a; header(Access-Control-Allow-Methods:*); header("Access-Control-Allow-Origin:*"); 如果嫌麻烦可以添加在api初始函数里面

全面(16万字)深入探索深度学习:基础原理到经典模型网络的全面解析

前言 Stacking(堆叠) 网页调试 学习率&#xff1a;它决定了模型在每一次迭代中更新参数的幅度激活函数-更加详细 激活函数的意义: 激活函数主要是让模型具有非线性数据拟合的能力&#xff0c;也就是能够对非线性数据进行分割/建模 如果没有激活函数&#xff1a; 第一个隐层: l…

jpom学习

jpom学习 整理jpom 一键安装 部署会需要 mvn跟jdk环境 # 安装服务端和 jdk、maven 环境 yum install -y wget && \ wget -O install.sh https://jpom.top/docs/install.sh && \ bash install.sh Server jdkmvndocker安装 安装docker挂载方式安装 docker …

2023.11.23 云服务器实现 Spring Boot 项目文件上传并访问

环境介绍 云服务器&#xff1a;京东云云服务器系统&#xff1a; CentOS 7.9JDK 版本&#xff1a;1.8Spring Boot 版本&#xff1a;2.7.17 具体步骤 步骤一 首先我们得先创建一个 Spring Boot 项目 创建如下目录结构 关于如何创建一个 Spring Boot 项目 请点击下方链接详细了解 …

【华为OD】B\C卷真题 100%通过:字符串统计 C/C++实现

目录 题目描述&#xff1a; 示例1 代码实现&#xff1a; 【华为OD】B\C卷真题 100%通过:字符串统计 C/C实现 题目描述&#xff1a; 给定两个字符集合&#xff0c;一个为全量字符集&#xff0c;一个为已占用字符集。已占用的字符集中的字符不能再使用&#xff0c;要求输出剩…

【Linux】驱动程序同步和异步通知方式

一、应用程序APP&#xff0c;访问驱动程序/dev/input/enent1流程&#xff1a; 假设用户程序直接访问 /dev/input/event0 设备节点&#xff0c;或者使用 tslib 访问设备节点&#xff0c;数据的流程如下&#xff1a; APP 发起读操作&#xff0c;若无数据则休眠&#xff1b;用户操…

【Linux】 sudo命令使用

sudo sudo是linux系统管理指令&#xff0c;是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具&#xff0c;如halt&#xff0c;reboot&#xff0c;su等等。这样不仅减少了root用户的登录 和管理时间&#xff0c;同样也提高了安全性。sudo不是对shell的一个代替…

AVD黑屏

启动android studio的AVD后&#xff0c;无法开启&#xff0c;一直处于黑屏状态 【解决方案】 1.点击 Android Virtual Device Manager中avd后面的编辑按钮 2.点击Show Advanced Settings按钮 3.找到Boot option中的Cold boot并选中 4.重启AVD

面向电力系统的多路实时数据采集通道设计

摘 要 随着电力系及其他领域科学技术地不断发展与目前人们对于电力能源的需求不断提高&#xff0c;我国对电力系统及相关行业投资逐年上升&#xff0c;电网装机容量得到提升&#xff0c;加快了电网全国互联建设。但随着电力电子技术的发展&#xff0c;电网中投入的非线性负载愈…

【nacos】配置使用

nacos配置 遇见的问题 代码启动成功&#xff0c;但是配置文件未生效 观察报错 无报错&#xff0c;也看到了加载的配置文件路径&#xff0c;但是配置未生效 [main] [TID: N/A] c.a.c.n.refresh.NacosContextRefresher : [Nacos Config] Listening config: dataIda-servi…

leetcode刷题:17.电话号码的字母组合

leetcode原题网页 题目描述&#xff1a;给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 思路&#xff1a;使用vector&#x…