排序算法学习-插入、希尔、归并

机器学习十大排序 刚学习完十种排序算法,记录一下。 1.冒泡排序:比较相邻两个值的大小,如果前者大于后者,交换二者位置 def sort1(arr): for i in range(len(arr)-1, 0, -1): for j in range(0, i): if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] return arr 2.选择排序:每次在未排 阅读详情

希尔排序其实是插入排序的优化,为了优化时间复杂度所进行的分断处理,在中小型数据可以使用希尔排序

package com.zhouyou.sort;

public class InsertSoort {
    public static void main(String[] args) {
        int[] data = {8,6,4,9,0,1,22};
        // 希尔排序只是在插入最外层多一层循环,进行分段处理
        for (int n = data.length/2; n >= 1; n /= 2) {
        for (int i = n; i < data.length; i++) {
            int j = i -n;
            int temp = data[i];
            for (; j >= 0 ; j-=n) {
                if (data[j] > temp){
                    data[j+n] = data[j];
                }else {
                    break;
                }
            }
            data[j+n] = temp;
        }
        }
        for (int i = 0; i < data.length; i++) {
            System.out.print(data[i] + " ");
        }
    }
}

根据步长来处理
归并排序是分而治之思想的典型应用。
直接上归并排序的代码,代码微复杂
归并排序其实要做两件事:

(1)“分解”——将序列每次折半划分。

(2)“合并”——将划分后的序列段两两合并后排序。

在每次合并过程中,都是对两个有序的序列段进行合并,然后排序。
在这里插入图片描述

package com.zhouyou.sort;

import java.util.Arrays;

public class MergeSort {
    public static void main(String[] args) {
        int[] data = {8,6,4,9,0,1,22};
        mergeSort(data,0,data.length-1);
        System.out.println(Arrays.toString(data));
    }

    public static void mergeSort(int[] data,int left,int right) {
        if (left<right){
            int mid = (left + right)/2;
            mergeSort(data,left,mid);
            mergeSort(data,mid+1,right);
            merge(data,left,right,mid);
        }
    }

    public static void merge(int[] data,int left,int right,int mid) {
        int temp[] = new int[data.length];
        int point1 = left;		//表示的是左边的第一个数的位置
        int point2 = mid + 1;	//表示的是右边的第一个数的位置
        int local = left;// 当前位置
        while (point1 <= mid && point2 <= right){
            // 左边到mid 到边界 右边到right边界
            if (data[point1]>data[point2]){
                temp[local] = data[point2];
                local++;
                point2++;
            }else {
                temp[local] = data[point1];
                local++;
                point1++;
            }
        }
        // 考虑 2边的 最后一位没有进行处理
        while (point1<=mid){
            temp[local++] = data[point1++];
            System.out.println(temp[local] + " one " + data[point1]);
        }
        while (point2<=right){
            temp[local++] = data[point2++];
            System.out.println(local + " two " + point2);
        }

        for (int i = left; i <= right; i++) {
            // 从临时数组 放回原数组
            data[i] = temp[i];
        }

    }
}

如果是奇数的话可以的,比如你要排三个元素,3,2,1 然后它就会被分为【3】.【2,1】然后后者还会进行递归调用.进而分成【3】【2】【1】,进行第一次合并后变为【3】【1,2】,第二次合并后变为【1,2,3,】…就OK了

数据结构学习第10篇 - 排序算法的比较冒泡排序、直接插入排序、选择排序、希尔排序、快速排序、归并排序和堆排序 排序算法的比较 内排序的方法有许多,教材上面提到的有:冒泡排序、直接插入排序、选择排序、希尔排序、快速排序、归并排序和堆排序。请编写一简单应用程序,实现上述提到的各种排序算法。 注意:1.需要输出每一趟排序的中间结果; 2.为方便排序算法的比较,不同排序算法请使用相同数据。 #include <stdio.h> #include <stdlib.h> #inc... 阅读详情

相关推荐

(建议收藏)2020最新排序算法总结:冒泡、选择、插入、希尔、快速、归并、堆排序、基数排序

一. 冒泡排序(BubbleSort) 基本思想:两个数比较大小,较大的数下沉,较小的数冒起来。 过程: 1.比较相邻的两个数据,如果第二个数小,就交换位置。 2.从后向前两两比较,一直到比较最前两个数据。最终最小数被交换到起始的位置,这样第一个最小数的位置就排好了。 3.继续重复上述过程,依次将第2.3…n-1个最小数排好位置。 平均时间复杂度:O(n2) java代码实现: public static void BubbleSort(int [] arr){ ..

S11035762的博客 3480

常见排序算法的学习与实现(插入、希尔、选择、堆排、冒泡、快速、归并)

一、直接插入排序 直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一 个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。当插入第i(i>=1)个元素时,前面的array[0],array[1],…,array[i-1]已经排好序,此时用array[i]的排序码与 array[i-1],array[i-2],…的排序码顺序...

qq_43581695的博客 274

基于 Node.js + MongoDB 技术栈的小众开源短链接程序 —— Lynx

开源的短链接程序有很多,像 YOURLS、Shlink 等大多采用 PHP + MySQL 技术栈。但我之前的服务器配置一般,再加上自己写的小玩具使用的是 Node.js + MongoDB,这些环境已经装在服务器上了,因此更倾向于寻找一款同样基于这套技术栈的短链接程序。搜索了很久才找到这么一款基于的短链接程序——Lynx。这个开源项目非常小众,Star 数只有两百多。

zc_mk的博客 826

算法 - 排序算法 (算法学习)(冒泡、选择、插入、希尔、快排、归并)

1)冒泡排序 1.1 图解演示

chun的博客 188

海康威视SADP SDK实战:5分钟搞定局域网设备搜索(附C++代码示例)

本文详细解析了海康威视SADP SDK在局域网设备搜索中的高效应用,通过C++代码示例展示如何快速实现设备发现与信息获取。SADP协议支持全面设备信息采集和实时状态更新,适用于智能安防和物联网管理场景,帮助开发者5分钟内完成设备搜索功能集成。

rum55的博客 873

从FreeCAD到BIMBase:PlaneGCS约束求解器的移植使用指南

本文为BIMBase平台的开发者提供了一份详细的PlaneGCS几何约束求解器移植与集成指南。文章深入探讨了如何从FreeCAD中提取PlaneGCS核心代码,并将其适配到BIMBase的C++二次开发环境中,重点解决了内存管理、数据模型桥接、约束抽象以及性能调优等关键问题,旨在帮助开发者构建稳定高效的参数化设计模块。

weixin_29213525的博客 320

Unity学习之C#___排序算法2(插入排序、希尔排序、归并排序)

Unity学习之C#___排序算法 上一篇排序算法中我们分享了四种排序算法:简单选择排序、插入排序、冒泡排序和快速排序,这次分享希尔排序、归并排序和另一种写法的插入排序 ...

OJMars的博客 674

AD20.多对多工程中将某个原理图导入PCB工程

AD20将多个原理图中的一个或多个导入到PCB文件中

鬼爷杂货铺 1万+

个人数据结构与算法学习总结-排序算法(冒泡、选择、插入、希尔、快速、归并、基数、堆排序)

排序算法 本总结主要是以“尚硅谷Java算法教程”的学习教程为主,加上一些个人的理解 目录排序算法算法的时间复杂度说明冒泡排序 排序算法(Sort Algorithm),是将一组数据,依指定的顺序进行排列 的过程。 排序的分类: 1) 内部排序: 指将需要处理的所有数据都加载到内部存储器中进行排序。 2) 外部排序法: 数据量过大,无法全部加载到内存中,需要借助外部存储进行 排序。 3) 常见的排序算法分类(见下图): 4)常见的算法时间复杂度由小到大依次为:Ο(1)<Ο(log2n)<Ο(n)<Ο(nl

qq_39084191的博客 583

NVIDIA 2025 Board Design Engineer 校招笔试全解析:从基础门电路到理想放大器设计

本文详细解析了NVIDIA 2025届板级设计工程师校招笔试的核心考点与解题策略。内容涵盖从基础门电路、CMOS实现NOR门,到开关电源CCM/DCM模式波形分析与效率计算,以及理想运放电路设计与稳定性优化。旨在帮助考生构建硬件知识体系,掌握工程思维,顺利通过NVIDIA Board Design Engineer校招笔试。

weixin_29172201的博客 195

多元相关性分析_PAST:最简便易用的统计学分析软件教程目录

欢迎来到PAST的世界!本教程并不是将PAST的所有功能均进行详细介绍,而只是挑选与生物、医学、微生物研究相关的统计学分析内容进行讲述。根据PAST内各项分析的标签分类,将该教程具体设置如下:PAST软件介绍PAST的基本信息数据的输入和修改数据的转换和标准化图像绘制 (Plot标签)点线图和直方图散点图条形图和箱须图饼图堆叠条形图三元相图气泡图单变量统计学分析 (Univariate标...

weixin_39605706的博客 3155

学习数据结构笔记(6)====>八大排序算法(Sort Algorithm)[冒泡,选择,插入,快速,希尔,基数,归并,堆排序]

学习来源–>传送门–>尚硅谷Java数据结构与java算法(Java数据结构与算法) 排序: 把一组数据,依指定顺序进行排列的过程. ml1.时间复杂度概述时间频度时间复杂度 1.时间复杂度概述 时间频度 时间频度(T(n)) 算法中语句的执行次数 案例 时间频度为 (n+1); 这里的n就是100; 加1是因为最后在循环时还要再判断一次; public class Demo01 { public static void main(String[] args) {

从零开始的异世界JAVA学习 241

【AI之路】cmd命令行通过Huggingface镜像站快速下载模型文件的方法

Hugging Face Hub 是分享机器学习模型、演示、数据集和指标的首选之地。huggingface_hub 库可以轻松下载Huggingface上有用的模型和数据集元数据。但大模型文件通常较大,国内下载太慢,那有没有高效便捷的方法?这个当然必须有!看到了吗?只是添加一个参数,下载大模型就搞定了。当然也可以使用python程序来下载。具体见前期博文:【AI之路】使用huggingface_hub通过huggingface镜像站hf-mirror.com下载大模型(附代码,实现大模型自由)

IT里的交易员-博客 1853

快速串讲校招高频面试题——排序算法和复杂度

排序算法 | 时间复杂度(平均) | 时间复杂度(最坏) | 时间复杂度(最好) | 空间复杂度 | 稳定性 |自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

2401_83916204的博客 740

我写了一个自动识别火车车厢位置的算法【lidar点云识别】

我写了一个自动识别火车车厢位置的算法【lidar点云识别】

qq_43212290的博客 797

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

C语言十大排序算法,让老师对你刮目相看的技巧(推荐指数:⭐⭐⭐⭐⭐)

来源:微信公众号「编程学习基地」 文章目录导论比较类排序非比较类排序1、冒泡排序2、选择排序3、插入排序4、快速排序5、希尔排序6、归并排序7、桶(基数)排序 导论 排序算法作为数据结构的重要部分,系统地学习一下是很有必要的。 十种常见排序算法可以分为两大类: 比较类排序 通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序 不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比..

deroy 835

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【排序算法】一篇文章带你搞懂所有排序!

排序算法

2403_87459748的博客 2143

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

十大排序算法

以下体会不知大家可曾感同身受: 1、十大排序算法,感觉理解了,却写不下来。 2、一个一个写下来,没什么问题,但是一口气,写完十大排序算法,却困难重重,错误百出。 3、哪怕当时写下来了,过了一段时间却忘了。 今天我之所以要写这篇文章,是因为上述问题,我都曾体会过。而且曾经一度怀疑人生。但是今天我克服上述问题。这不是因为我IQ提高或者记忆力加强的缘故。而是因为我调整学习的策略。在前行的途中,我...

n_fly的博客 251

数据结构:排序- 插入排序(插入排序and希尔排序) , 选择排序(选择排序and堆排序) , 交换排序(冒泡排序and快速排序) , 归并排序

数据结构:排序- 插入排序(插入排序and希尔排序) , 选择排序(选择排序and堆排序) , 交换排序(冒泡排序and快速排序) , 归并排序

2301_77649794的博客 5858

几种常见的排序算法的Ptython实现(冒泡、选择、插入、希尔、归并、快速)

    一、综述 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括: 时间复杂度 平方阶 (O(n2)) 排序 各类简单排序:直接插入、直接选择和冒泡排序。 ...

weixin_41954254的博客 516

【数据结构】之排序算法综合篇

博主声明: 转载请在开头附加本文链接及作者信息,并标记为转载。本文由博主威威喵原创,请多支持与指教。 本文首发于此 博主:威威喵|博客主页:https://blog.youkuaiyun.com/smile_running 数据结构课程的内容基本忘光了,所以又拾起数据结构与算法的书本,重新学习了一边排序算法的原理和实现,在经过几个晚上的努力,终于把这几种排序算法给搞明白了,下...

你若盛开,蜜蜂自来 7662

常见排序算法原理简介

常见排序算法原理学习笔记冒泡排序快速排序插入排序希尔排序选择排序归并排序基数排序堆排序 冒泡排序 相邻两个比较,重复多轮 1.将数组当中的左右元素,依次比较,保证右边的元素始终大于左边的元素; ( 第一轮结束后,序列最后一个元素一定是当前序列的最大值;) 2.对序列当中剩下的n-1个元素再次执行步骤1。 3.对于长度为n的序列,一共需要执行n-1轮比较(利用while循环可以减少执行次数) 快速排序 1.从数组当中选择一个基准数(pivot),这里选择第一个元素即可 2.将数组当中的所有数依次遍历(同时

weixin_44181671的博客 1258

面试中可能被问到的常用排序算法,java面试题精选

在面试前我整理归纳了一些面试学习资料,文中结合我的朋友同学面试美团滴滴这类大厂的资料及案例由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!大家看完有什么不懂的可以在下方留言讨论也可以关注。网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)一个人可以走的很快,但一群人才能走的更远!

2401_84412648的博客 911

2024年最全十大经典排序算法动图演示+Python实现_排序算法 动画,2024年最新快手算法面试题

现在能在网上找到很多很多的学习资源,有免费的也有收费的,当我拿到1套比较全的学习资源之前,我并没着急去看第1节,我而是去审视这套资源是否值得学习,有时候也会去问一些学长的意见,如果可以之后,我会对这套学习资源做1个学习计划,我的学习计划主要包括规划图和学习进度表。分享给大家这份我薅到的免费视频资料,质量还不错,大家可以跟着学习数据规模“桶”的个数占用常数内存,不占用额外内存占用额外内存冒泡排序(Bubble Sort)也是一种简单直观的排序算法。

2401_84572711的博客 1077

C++编写常见排序算法、冒泡、选择、插入、希尔、归并排序

C++编写常见排序算法、冒泡、选择、插入、希尔、归并排序

DKPT的博客 164

面试必备:冒泡,选择,插入,希尔,归并,快速排序大合集

目录 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 在很多大厂的面试中,算法是最基本的要求,像基础的算法,冒泡,选择,插入等,基本上都会问到。 很多同学往往忽略了其重要程度,只注重编程语言,小编并不建议这样子,今天我们来梳理一下算法,汇总一下面试的一些基础算法。 冒泡排序 原理:每次冒泡排序操作都会将相邻的两个元素进行比较,看是否满足大小关系要求,如果不满足,就交...

互联网应用架构 728
上一篇: 数据结构与算法-基础数据结构:栈结构学习与练习
下一篇: Oauth2授权模式访问之授权码模式(authorization_code)
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值